Refactor views and CSS

This commit is contained in:
James Cole
2024-03-09 12:11:06 +01:00
parent 46a60af966
commit 0ff405d1e0
16 changed files with 867 additions and 461 deletions

View File

@@ -104,7 +104,7 @@ return [
'two_factor_forgot' => 'I forgot my two-factor thing.',
'two_factor_lost_header' => 'Lost your two factor authentication?',
'two_factor_lost_intro' => 'If you lost your backup codes as well, you have bad luck. This is not something you can fix from the web interface. You have two choices.',
'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read <a href="https://docs.firefly-iii.org/references/faq/firefly-iii/using/#i-lost-my-2fa-token-generator-or-2fa-has-stopped-working>this entry in the FAQ</a> for instructions.',
'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, read <a href="https://docs.firefly-iii.org/references/faq/firefly-iii/using/#i-lost-my-2fa-token-generator-or-2fa-has-stopped-working">this entry in the FAQ</a> for instructions.',
'two_factor_lost_fix_owner' => 'Otherwise, email the site owner, <a href="mailto::site_owner">:site_owner</a> and ask them to reset your two factor authentication.',
'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.',
'pref_two_factor_new_backup_codes' => 'Get new backup codes',

View File

@@ -0,0 +1,30 @@
@extends('layout.v2.error')
@section('content')
<div class="row">
<div class="col">
<h1><a href="{{ route('index') }}"><strong>Firefly</strong> III</a></h1>
</div>
</div>
<div class="row">
<div class="col">
<h2>{{ __('firefly.two_factor_lost_header') }}</h2>
</div>
</div>
<div class="row">
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
<p>
{{ trans('firefly.two_factor_lost_intro') }}
</p>
<ul>
<li>
{!! trans('firefly.two_factor_lost_fix_self') !!}
</li>
<li>
{!! trans('firefly.two_factor_lost_fix_owner', ['site_owner' => $siteOwner]) !!}
</li>
</ul>
</div>
</div>
@endsection

View File

@@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="{{ trans('config.html_language') }}">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
<title>Firefly III</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<base href="{{ route('index') }}/">
<link rel="stylesheet" href="v1/lib/bs/css/bootstrap.min.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
<link rel="stylesheet" href="v1/lib/fa/css/font-awesome.min.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
<link href="v1/lib/adminlte/css/AdminLTE.min.css?v={{ FF_VERSION }}" rel="stylesheet" type="text/css" nonce="{{ JS_NONCE }}">
{# favicons #}
{% include('partials.favicons') %}
</head>
<body class="container">
<div class="row">
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
<h1><a href="{{ route('index') }}"><strong>Firefly</strong>III</a></h1>
</div>
</div>
<div class="row">
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
<h3 class="text-info">{{ 'two_factor_lost_header'|_ }}</h3>
</div>
</div>
<div class="row">
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
<p>
{{ 'two_factor_lost_intro'|_ }}
</p>
<ul>
<li>
{{ 'two_factor_lost_fix_self'|_ }}
</li>
<li>
{{ trans('firefly.two_factor_lost_fix_owner', {site_owner: siteOwner})|raw }}
</li>
</ul>
</div>
</div>
</body>
</html>

View File

@@ -1,138 +0,0 @@
{% extends "./layout/v3/session" %}
{% block content %}
<div class="login-box">
<div class="login-logo">
<img src="v3-local/logo/logo-session.png" width="68" height="100" alt="Firefly III Logo" title="Firefly III" />
</div>
{# DEMO site warning #}
{% if IS_DEMO_SITE %}
<div class="card mb-2">
<div class="card-body login-card-body">
<p>
Welcome to the Firefly III demonstration website!<br/>
<br/>
To log in, please use email address <strong>{{ DEMO_USERNAME }}</strong> with password
<strong>{{ DEMO_PASSWORD }}</strong>.
</p>
</div>
</div>
{% endif %}
{# SUCCESS MESSAGE (ALWAYS SINGULAR) #}
{% if Session.has('success') %}
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert">
<span>&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<strong>{{ 'flash_success'|_ }}</strong> {{ session('success') }}
</div>
{% endif %}
{# ERROR MSG #}
{% if errors.count > 0 %}
<div class="row">
<div class="col-lg-12">
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span>&times;</span><span
class="sr-only">{{ 'close'|_ }}</span>
</button>
<strong>{{ 'flash_error'|_ }}</strong> {{ errors.first }}
</div>
</div>
</div>
{% endif %}
{# OTHER LOGIN MESSAGES #}
{% if session('logoutMessage') %}
<div class="row">
<div class="col-lg-12">
<div class="alert alert-info alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span>&times;</span><span
class="sr-only">{{ 'close'|_ }}</span>
</button>
{{ session('logoutMessage') }}
</div>
</div>
</div>
{% endif %}
<!-- /.login-logo -->
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">{{ 'sign_in_to_start'|_ }}</p>
<form action="{{ route('login') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="input-group mb-3">
{% if config('firefly.authentication_guard') == 'web' %}
<input type="email" " class="form-control" name="email"
placeholder="{{ trans('form.email') }}"
value="{% if not IS_DEMO_SITE %}{{ email }}{% else %}{{ DEMO_USERNAME }}{% endif %}">
{% else %}
<input type="text" " autocomplete="username" name="{{ usernameField }}" value="{{ email }}"
class="form-control" placeholder="{{ trans('form.login_name') }}"/>
{% endif %}
<div class="input-group-append">
<div class="input-group-text">
{% if config('firefly.authentication_guard') == 'web' %}
<span class="fas fa-envelope"></span>
{% else %}
<span class="fas fa-user"></span>
{% endif %}
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="password" autocomplete="current-password"
{% if IS_DEMO_SITE %}value="{{ DEMO_PASSWORD }}"{% endif %} class="form-control"
placeholder="{{ trans('form.password') }}"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="icheck-primary">
<input type="checkbox" name="remember" {% if remember %}checked="checked"{% endif %}
value="1" id="remember">
<label for="remember">
{{ trans('form.remember_me') }}
</label>
</div>
</div>
</div>
<div class="row mb-4">
<!-- /.col -->
<div class="col-12">
<button type="submit" class="btn btn-primary btn-block">{{ 'sign_in'|_ }}</button>
</div>
<!-- /.col -->
</div>
</form>
{% if allowReset %}
<p class="mb-1">
<a href="{{ route('password.reset.request') }}">{{ 'forgot_my_password'|_ }}</a>
</p>
{% endif %}
{% if allowRegistration %}
<p class="mb-0">
<a href="{{ route('register') }}" class="text-center">{{ 'register_new_account'|_ }}</a><br>
</p>
{% endif %}
</div>
<!-- /.login-card-body -->
</div>
</div>
{% endblock %}
{% block scripts %}
<script nonce="{{ JS_NONCE }}">
$(function () {
"use strict";
$('#focus').focus();
});
</script>
{% endblock %}

View File

@@ -1,49 +0,0 @@
{% extends "./layout/v3/session" %}
{% block content %}
<div class="login-box">
<div class="login-logo">
<img src="v3-local/logo/logo-session.png" width="68" height="100" alt="Firefly III Logo" title="Firefly III" />
</div>
{% if session_has('error') %}
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert">
<span>&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<strong>{{ 'flash_error'|_ }}</strong> {{ session('error') }}
</div>
{% endif %}
<!-- /.login-logo -->
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">{{ trans('firefly.two_factor_welcome', {user: user.email}) }}</p>
<p class="login-box-msg">{{ 'two_factor_enter_code'|_ }}</p>
<form action="{{ route('two-factor.submit') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="input-group mb-3">
<input type="text" name="one_time_password" inputmode="numeric" autocomplete="one-time-code" class="form-control" placeholder="{{ 'two_factor_code_here'|_ }}" autofocus />
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-calculator"></span>
</div>
</div>
</div>
<div class="row">
<!-- /.col -->
<div class="col-6 offset-6">
<button type="submit" class="btn btn-primary btn-block">{{ 'authenticate'|_ }}</button>
</div>
<!-- /.col -->
</div>
</form>
<p class="mb-1">
<a href="{{ route('two-factor.lost') }}">{{ 'two_factor_forgot'|_ }}</a>
</p>
</div>
<!-- /.login-card-body -->
</div>
</div>
{% endblock %}

View File

@@ -1,89 +0,0 @@
{% extends "./layout/v3/session" %}
{% block content %}
<div class="register-box">
<div class="login-logo">
<img src="v3-local/logo/logo-session.png" width="68" height="100" alt="Firefly III Logo"
title="Firefly III"/>
</div>
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>{{ 'flash_error'|_ }}</strong> {{ 'problems_with_input'|_ }}<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="card">
<div class="card-body register-card-body">
<p class="login-box-msg">{{ 'register_new_account'|_ }}</p>
<form action="{{ route('register') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="invite_code" value="{{ inviteCode }}">
<div class="input-group mb-3">
<input type="email" name="email" value="{{ email }}" class="form-control"
placeholder="{{ trans('form.email') }}"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-envelope"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" autocomplete="new-password" class="form-control"
placeholder="{{ trans('form.password') }}" name="password"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" autocomplete="new-password" class="form-control"
placeholder="{{ trans('form.password_confirmation') }}" name="password_confirmation"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="icheck-primary">
<input type="checkbox" id="verify_password" checked name="verify_password" value="1">
<label for="verify_password">
{{ trans('form.verify_password') }}
<a data-toggle="modal" data-target="#passwordModal" href="#passwordModal"><span
class="fa fa-fw fa-question-circle"></span></a>
</label>
</div>
</div>
</div>
<div class="row">
<div class="col-4 offset-8">
<button type="submit" class="btn btn-primary btn-block">Register</button>
</div>
</div>
</form>
<p class="mb-1">
<a href="{{ route('login') }}">{{ 'want_to_login'|_ }}</a>
</p>
<p class="mb-0">
<a href="{{ route('password.reset.request') }}">{{ 'forgot_my_password'|_ }}</a>
</p>
</div>
<!-- /.form-box -->
</div><!-- /.card -->
</div>
<!-- /.register-box -->
{% include 'partials.password-modal' %}
{% endblock %}

View File

@@ -1,67 +0,0 @@
{% extends "./layout/v3/session" %}
{% block content %}
<div class="login-box">
<div class="login-logo">
<img src="v3-local/logo/logo-session.png" width="68" height="100" alt="Firefly III Logo"
title="Firefly III"/>
</div>
{% if session.status %}
<div class="alert alert-success">
{{ session.status }}
</div>
{% endif %}
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>{{ 'flash_error'|_ }}</strong> {{ 'problems_with_input'|_ }}<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="card">
<div class="card-body login-card-body">
{% if session('status') %}
<p class="login-box-msg text-success">
{{ session('status') }}
</p>
{% else %}
<p class="login-box-msg">{{ 'reset_password'|_ }}</p>
<form action="{{ route('password.email') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="input-group mb-3">
<input type="email" class="form-control" name="email"
placeholder="{{ trans('form.email') }}"/>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-envelope"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<button type="submit" class="btn btn-primary btn-block">{{ 'reset_button'|_ }}</button>
</div>
<!-- /.col -->
</div>
</form>
<p class="mt-3 mb-1">
<a href="{{ route('login') }}">{{ 'want_to_login'|_ }}</a>
</p>
{% if allowRegistration %}
<p class="mb-0">
<a href="{{ route('register') }}" class="text-center">{{ 'register_new_account'|_ }}</a>
</p>
{% endif %}
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -1,28 +0,0 @@
{% extends "./layout/v3/session" %}
{% block content %}
<div class="login-box">
<div class="login-logo">
<img src="v3-local/logo/logo-session.png" width="68" height="100" alt="Firefly III Logo"
title="Firefly III"/>
</div>
{% if errors|length > 0 %}
<div class="alert alert-danger">
<strong>{{ 'flash_error'|_ }}</strong> {{ 'problems_with_input'|_ }}<br><br>
<ul>
{% for error in errors.all %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="card">
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
{% include 'partials.password-modal' %}
{% endblock %}

View File

@@ -1,37 +0,0 @@
{% extends "./layout/v3/guest" %}
{% block content %}
{% if errors.has('code') %}
<div class="row">
<div class="col-lg-12">
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span>&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<strong>{{ 'flash_error'|_ }}</strong> {{ errors.get('code')[0] }}
</div>
</div>
</div>
{% endif %}
<div class="login-box-body">
<p class="login-box-msg">{{ trans('firefly.two_factor_welcome', {user: user.email}) }}</p>
<p class="login-box-msg">{{ 'two_factor_enter_code'|_ }}</p>
<form action="{{ route('two-factor.post') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="form-group has-feedback">
<input type="number" name="code" class="form-control" placeholder="{{ 'two_factor_code_here'|_ }}" spellcheck="false"/>
</div>
<div class="row">
<div class="col-xs-6 col-xs-offset-6">
<button type="submit" class="btn btn-primary btn-block btn-flat">{{ 'authenticate'|_ }}</button>
</div>
</div>
</form>
<a href="{{ route('two-factor.lost') }}">{{ 'two_factor_forgot'|_ }}</a>
</div>
{% endblock %}

View File

@@ -1,3 +1,14 @@
@extends('layout.v2.error')
@section('content')
<div class="row">
<div class="col">
<h1><a href="{{ route('index') }}"><strong>Firefly</strong> III</a></h1>
</div>
</div>
@endsection
<!DOCTYPE html>
<html lang="{{ trans('config.html_language') }}">
<head>
@@ -28,7 +39,7 @@
<body class="container">
<div class="row">
<div class="col-lg-10 col-lg-offset-1 col-md-12 col-sm-12 col-xs-12">
<h1><a href="{{ route('index') }}"><strong>Firefly</strong>III</a></h1>
<h1><a href="{{ route('index') }}"><strong>Firefly</strong>III</a></h1>xxxxxx
</div>
</div>
<div class="row">

View File

@@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="en">
<head>
<base href="{{ route('index') }}/"/>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Firefly III</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Firefly III">
<!-- copy of head.blade.php -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="robots" content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="color-scheme" content="light dark">
<script type="text/javascript" nonce="{{ $JS_NONCE }}">
/*!
* Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors
* Licensed under the Creative Commons Attribution 3.0 Unported License.
*/
(() => {
'use strict'
// todo store just happens to store in localStorage but if not, this would break.
const getStoredTheme = () => JSON.parse(localStorage.getItem('darkMode'))
const getPreferredTheme = () => {
const storedTheme = getStoredTheme()
if (storedTheme) {
return storedTheme
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
}
const setTheme = theme => {
if (theme === 'browser' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark')
window.theme = 'dark';
return;
}
if (theme === 'browser' && window.matchMedia('(prefers-color-scheme: light)').matches) {
window.theme = 'light';
document.documentElement.setAttribute('data-bs-theme', 'light')
return;
}
document.documentElement.setAttribute('data-bs-theme', theme)
window.theme = theme;
}
setTheme(getPreferredTheme())
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme()
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme())
}
})
})()
</script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="v2/css/fonts.css" rel="stylesheet">
<link rel="stylesheet" href="v2/css/adminlte.css">
<!-- session layout includes custom set of icons -->
<link href="v2-local/fa/css/fontawesome.min.css" rel="stylesheet"/>
<link href="v2-local/fa/css/solid.min.css" rel="stylesheet"/>
</head> <!--end::Head--> <!--begin::Body-->
<body class="container bg-body-secondary">
<div class="row">
<div class="col mt-3">
<img src="images/logo-session.png" width="68" height="100" alt="Firefly III Logo" title="Firefly III"/><br>
</div>
</div>
@yield('content')
<script src="v2/js/adminlte.js" nonce="{{ $JS_NONCE }}"></script>
@yield('scripts')
</body><!--end::Body-->
</html>