diff options
Diffstat (limited to 'resources')
-rw-r--r-- | resources/assets/js/forms.js | 35 | ||||
-rw-r--r-- | resources/assets/js/vendor.js | 7 | ||||
-rw-r--r-- | resources/assets/themes/base.less | 66 | ||||
-rw-r--r-- | resources/lang/de_DE/default.po | 22 | ||||
-rw-r--r-- | resources/lang/en_US/default.po | 18 | ||||
-rw-r--r-- | resources/lang/pt_BR/default.po | 2 | ||||
-rw-r--r-- | resources/views/emails/mail.twig | 8 | ||||
-rw-r--r-- | resources/views/emails/password-reset.twig | 3 | ||||
-rw-r--r-- | resources/views/layouts/parts/navbar.twig | 18 | ||||
-rw-r--r-- | resources/views/macros/form.twig | 18 | ||||
-rw-r--r-- | resources/views/pages/credits.twig | 24 | ||||
-rw-r--r-- | resources/views/pages/login.twig | 11 | ||||
-rw-r--r-- | resources/views/pages/password/reset-form.twig | 18 | ||||
-rw-r--r-- | resources/views/pages/password/reset-success.twig | 12 | ||||
-rw-r--r-- | resources/views/pages/password/reset.twig | 32 | ||||
-rw-r--r-- | resources/views/pages/user-shifts.html | 8 |
16 files changed, 236 insertions, 66 deletions
diff --git a/resources/assets/js/forms.js b/resources/assets/js/forms.js index f5818e97..9970b907 100644 --- a/resources/assets/js/forms.js +++ b/resources/assets/js/forms.js @@ -16,7 +16,7 @@ global.checkAll = (id, checked) => { * Sets the checkboxes according to the given type * * @param {string} id The elements ID - * @param {list} shifts_list A list of numbers + * @param {list} shiftsList A list of numbers */ global.checkOwnTypes = (id, shiftsList) => { $('#' + id + ' input[type="checkbox"]').each(function () { @@ -144,10 +144,10 @@ $(function () { elem.children('input').on('click', function (ev) { ev.stopImmediatePropagation(); if (typeof elem.data('DateTimePicker') === 'undefined') { - elem.datetimepicker(opts); - elem.data('DateTimePicker').show(); + elem.datetimepicker(opts); + elem.data('DateTimePicker').show(); } else { - elem.data('DateTimePicker').toggle(); + elem.data('DateTimePicker').toggle(); } }); }); @@ -173,3 +173,30 @@ $(function () { }); }); }); + +/** + * Set the filter selects to latest state + * + * Uses DOMContentLoaded to prevent flickering + */ +window.addEventListener('DOMContentLoaded', () => { + const filter = document.getElementById('collapseShiftsFilterSelect'); + if (!filter || localStorage.getItem('collapseShiftsFilterSelect') !== 'hidden') { + return; + } + + filter.classList.remove('in'); +}); +$(() => { + if (typeof (localStorage) === 'undefined') { + return; + } + + const onChange = (e) => { + localStorage.setItem('collapseShiftsFilterSelect', e.type); + }; + + $('#collapseShiftsFilterSelect') + .on('hidden.bs.collapse', onChange) + .on('shown.bs.collapse', onChange); +}); diff --git a/resources/assets/js/vendor.js b/resources/assets/js/vendor.js index bf3807f7..b4b6487d 100644 --- a/resources/assets/js/vendor.js +++ b/resources/assets/js/vendor.js @@ -10,6 +10,13 @@ require('./forms'); require('./sticky-headers'); require('./moment-countdown'); +moment.updateLocale('en', { + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + $.ajaxSetup({ headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')} }); diff --git a/resources/assets/themes/base.less b/resources/assets/themes/base.less index b44602f0..74dadc11 100644 --- a/resources/assets/themes/base.less +++ b/resources/assets/themes/base.less @@ -11,7 +11,7 @@ body { } .first { - clear: both; + clear: both; margin-top: 30px; } @@ -52,7 +52,7 @@ table a > .icon-icon_angel { } .table .form-group { - margin-bottom: 0; + margin-bottom: 0; } .stats { @@ -60,20 +60,22 @@ table a > .icon-icon_angel { .make-xs-column(6); font-size: 20px; height: 150px; - text-align: center; - - .number { - font-size: 80px; - font-weight: 200; - } - @media (max-width: @screen-md) { - font-size: inherit; - .number { - font-size: 40px; - } + text-align: center; + + .number { + font-size: 80px; + font-weight: 200; + } + + @media (max-width: @screen-md) { + font-size: inherit; + .number { + font-size: 40px; + } } } + .stats-danger { color: @brand-danger; } @@ -87,12 +89,12 @@ table a > .icon-icon_angel { } .dashboard-panel { - position: relative; - font-size: 20px; + position: relative; + font-size: 20px; color: @headings-color; - .panel-link { - position: absolute; + .panel-link { + position: absolute; width: 100%; height: 100%; top: 0; @@ -102,11 +104,11 @@ table a > .icon-icon_angel { background-color: @brand-primary; /* Fix to make div clickable in IE */ opacity: 0; /* Fix to make div clickable in IE */ filter: alpha(opacity=1); /* Fix to make div clickable in IE */ - } + } - .panel-link:hover { + .panel-link:hover { opacity: 0.3; - } + } } .panel-primary .panel-heading a { @@ -140,7 +142,7 @@ table a > .icon-icon_angel { } .selection .checkbox { - display: block; + display: block; } .shift-calendar { @@ -190,9 +192,20 @@ table a > .icon-icon_angel { flex-shrink: 0; } - .shift { - margin: 0 5px 5px 0; + .shift-card { + z-index: 0; overflow: hidden; + position: relative; + margin: 0 5px 5px 0; + + &:hover { + overflow: visible; + z-index: 100; + } + + .shift { + min-height: 100%; + } } } @@ -201,13 +214,14 @@ table a > .icon-icon_angel { } .column_duration { - text-align: right; + text-align: right; } .messages { &:focus { outline: none; } + a:focus { outline: none; } @@ -296,7 +310,9 @@ table a > .icon-icon_angel { float: none; width: 100%; - position: relative; left: 0; right: 0; + position: relative; + left: 0; + right: 0; min-height: 1px; padding-right: 15px; padding-left: 15px; diff --git a/resources/lang/de_DE/default.po b/resources/lang/de_DE/default.po index 3c1e0d15..8dba9b4b 100644 --- a/resources/lang/de_DE/default.po +++ b/resources/lang/de_DE/default.po @@ -619,9 +619,9 @@ msgid "Please visit %s to recover your password." msgstr "Bitte besuche %s, um Dein Passwort zurückzusetzen" #: includes/controller/users_controller.php:394 -msgid "We sent an email containing your password recovery link." +msgid "We sent you an email containing your password recovery link." msgstr "" -"Wir haben eine eMail mit einem Link zum Passwort-zurücksetzen geschickt." +"Wir haben dir eine eMail mit einem Link zum Passwort-zurücksetzen geschickt." #: includes/helper/email_helper.php:41 #, php-format @@ -2772,3 +2772,21 @@ msgstr "Bitte gib ein Passwort an." msgid "validation.login.required" msgstr "Bitte gib einen Loginnamen an." + +msgid "form.submit" +msgstr "Absenden" + +msgid "validation.email.required" +msgstr "Bitte gib eine E-Mail-Adresse an." + +msgid "validation.email.email" +msgstr "Die E-Mail-Adresse ist nicht gültig." + +msgid "validation.password.min" +msgstr "Dein angegebenes Passwort ist zu kurz." + +msgid "validation.password.confirmed" +msgstr "Deine Passwörter stimmen nicht überein." + +msgid "validation.password_confirmation.required" +msgstr "Du musst dein Passwort bestätigen." diff --git a/resources/lang/en_US/default.po b/resources/lang/en_US/default.po index 1ff16c83..a2d56fd1 100644 --- a/resources/lang/en_US/default.po +++ b/resources/lang/en_US/default.po @@ -30,3 +30,21 @@ msgstr "The password is required." msgid "validation.login.required" msgstr "The login name is required." + +msgid "form.submit" +msgstr "Submit" + +msgid "validation.email.required" +msgstr "The email address is required." + +msgid "validation.email.email" +msgstr "This email address is not valid." + +msgid "validation.password.min" +msgstr "Your password is too short." + +msgid "validation.password.confirmed" +msgstr "Your passwords are not equal." + +msgid "validation.password_confirmation.required" +msgstr "You have to confirm your password." diff --git a/resources/lang/pt_BR/default.po b/resources/lang/pt_BR/default.po index b9bf420d..e5e5371e 100644 --- a/resources/lang/pt_BR/default.po +++ b/resources/lang/pt_BR/default.po @@ -551,7 +551,7 @@ msgid "Please visit %s to recover your password." msgstr "Por favor visite %s para recuperar sua senha" #: includes/controller/users_controller.php:271 -msgid "We sent an email containing your password recovery link." +msgid "We sent you an email containing your password recovery link." msgstr "Nós enviamos um email com o link para recuperação da sua senha." #: includes/helper/email_helper.php:12 diff --git a/resources/views/emails/mail.twig b/resources/views/emails/mail.twig index ec70f594..e0ad7b64 100644 --- a/resources/views/emails/mail.twig +++ b/resources/views/emails/mail.twig @@ -1,6 +1,6 @@ -{{ __('Hi %s,', [username]) }} +{% block title %}{{ __('Hi %s,', [username]) }}{% endblock %} -{{ __('here is a message for you from the %s:', [config('app_name')]) }} -{{ message|raw }} +{% block introduction %}{{ __('here is a message for you from the %s:', [config('app_name')]) }}{% endblock %} +{% block message %}{{ message|raw }}{% endblock %} -{{ __('This email is autogenerated and has not been signed. You got this email because you are registered in the %s.', [config('app_name')]) }} +{% block footer %}{{ __('This email is autogenerated and has not been signed. You got this email because you are registered in the %s.', [config('app_name')]) }}{% endblock %} diff --git a/resources/views/emails/password-reset.twig b/resources/views/emails/password-reset.twig new file mode 100644 index 00000000..30b613b4 --- /dev/null +++ b/resources/views/emails/password-reset.twig @@ -0,0 +1,3 @@ +{% extends "emails/mail.twig" %} + +{% block message %}{{ __('Please visit %s to recover your password.', [url('/password/reset/') ~ reset.token]) }}{% endblock %} diff --git a/resources/views/layouts/parts/navbar.twig b/resources/views/layouts/parts/navbar.twig index 61c6a10b..0b2eee63 100644 --- a/resources/views/layouts/parts/navbar.twig +++ b/resources/views/layouts/parts/navbar.twig @@ -55,16 +55,14 @@ {{ elements.toolbar_item(user.name, url('users', {'action': 'view'}), 'users', 'icon icon-icon_angel') }} {% endif %} - {% if has_permission_to('user_settings') or has_permission_to('logout') %} - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </a> - <ul class="dropdown-menu" role="menu"> - {{ menuUserSubmenu()|join(" ")|raw }} - </ul> - </li> - {% endif %} + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + <span class="caret"></span> + </a> + <ul class="dropdown-menu" role="menu"> + {{ menuUserSubmenu()|join(" ")|raw }} + </ul> + </li> </ul> {% endblock %} diff --git a/resources/views/macros/form.twig b/resources/views/macros/form.twig new file mode 100644 index 00000000..5d41b085 --- /dev/null +++ b/resources/views/macros/form.twig @@ -0,0 +1,18 @@ +{% macro input(name, label, type, required) %} + <div class="form-group"> + {% if label %} + <label for="{{ name }}">{{ label }}</label> + {% endif %} + <input type="{{ type|default('text') }}" class="form-control" id="{{ name }}" name="{{ name }}" + {%- if required|default(false) %} required="required"{% endif -%} + > + </div> +{% endmacro %} + +{% macro hidden(name, value) %} + <input type="hidden" id="{{ name }}" name="{{ name }}" value="{{ value }}"> +{% endmacro %} + +{% macro submit(label) %} + <button type="submit" class="btn btn-default">{{ label|default(__('form.submit')) }}</button> +{% endmacro %} diff --git a/resources/views/pages/credits.twig b/resources/views/pages/credits.twig index 3bb04895..8bd1f694 100644 --- a/resources/views/pages/credits.twig +++ b/resources/views/pages/credits.twig @@ -4,28 +4,28 @@ {% block content %} <div class="container"> - <h1>Credits</h1> + <h1>{{ __('Credits') }}</h1> <div class="row"> {% for title, credit in credits %} <div class="col-md-4"> - <h2>{{ title }}</h2> - {{ credit|markdown }} + <h2>{{ __(title) }}</h2> + {{ __(credit)|markdown }} </div> {% endfor %} <div class="col-md-4"> - <h2>Source code</h2> - <p>Version: <i>{{ version }}</i></p> + <h2>{{ __('Source code') }}</h2> + <p>{{ __('Version: _%s_', [version])|markdown }}</i></p> <p> - The original engelsystem was written by - <a href="https://github.com/cookieBerlin/engelsystem">cookie</a>. - It was then completely rewritten and enhanced by - <a href="https://notrademark.de">msquare</a> (maintainer) and - <a href="https://myigel.name">MyIgel</a>. + {{ __('The original engelsystem was written by +[cookie](https://github.com/cookieBerlin/engelsystem). +It was then completely rewritten and enhanced by [msquare](https://notrademark.de) (maintainer) and +[MyIgel](https://myigel.name).')|markdown }} </p> <p> - Please look at the <a href="https://github.com/engelsystem/engelsystem/graphs/contributors"> - contributor list on GitHub</a> for a complete list. + {{ __('Please have a look at the +[contributors list on GitHub](https://github.com/engelsystem/engelsystem/graphs/contributors) +for a complete list.')|markdown }} </p> </div> </div> diff --git a/resources/views/pages/login.twig b/resources/views/pages/login.twig index da6f4fdf..34dbd63f 100644 --- a/resources/views/pages/login.twig +++ b/resources/views/pages/login.twig @@ -32,6 +32,7 @@ <div class="col-sm-6 col-sm-offset-3 col-md-4 col-md-offset-4"> <div class="panel panel-primary first"> <div class="panel-body"> + {{ msg() }} {% for message in errors|default([]) %} {{ m.alert(__(message), 'danger') }} {% endfor %} @@ -50,7 +51,7 @@ <div class="input-group"> <span class="input-group-addon input-lg">{{ m.glyphicon('lock') }}</span> <input class="form-control input-lg" id="form_password" - type="password" name="password" value="" placeholder="{{ __('Password') }}"> + type="password" name="password" value="" placeholder="{{ __('Password') }}"> </div> </div> @@ -61,7 +62,7 @@ </div> <div class="text-center"> - <a href="{{ url('user-password-recovery') }}" class=""> + <a href="{{ url('/password/reset') }}" class=""> {{ __('I forgot my password') }} </a> </div> @@ -93,8 +94,10 @@ </a> </div> </div> - </div> - {{ m.glyphicon('info-sign') }} {{ __('Please note: You have to activate cookies!') }} + <div class="col-md-12 text-center"> + {{ m.glyphicon('info-sign') }} {{ __('Please note: You have to activate cookies!') }} + </div> + </div> </div> {% endblock %} diff --git a/resources/views/pages/password/reset-form.twig b/resources/views/pages/password/reset-form.twig new file mode 100644 index 00000000..60eb2499 --- /dev/null +++ b/resources/views/pages/password/reset-form.twig @@ -0,0 +1,18 @@ +{% extends "pages/password/reset.twig" %} +{% import 'macros/base.twig' as m %} +{% import 'macros/form.twig' as f %} + +{% block row_content %} + <div class="col-md-8"> + <form action="" enctype="multipart/form-data" method="post"> + {{ csrf() }} + + {{ f.input('password', __('Password'), 'password', true) }} + {{ f.input('password_confirmation', __('Confirm password'), 'password', true) }} + + <div class="form-group"> + {{ f.submit(__('Save')) }} + </div> + </form> + </div> +{% endblock %} diff --git a/resources/views/pages/password/reset-success.twig b/resources/views/pages/password/reset-success.twig new file mode 100644 index 00000000..19b8a93e --- /dev/null +++ b/resources/views/pages/password/reset-success.twig @@ -0,0 +1,12 @@ +{% extends "pages/password/reset.twig" %} +{% import 'macros/base.twig' as m %} + +{% block row_content %} + <div class="col-md-12"> + {% if type == 'email' %} + {{ m.alert(__('We sent you an email containing your password recovery link.'), 'info') }} + {% elseif type == 'reset' %} + {{ m.alert(__('Password saved.'), 'success') }} + {% endif %} + </div> +{% endblock %} diff --git a/resources/views/pages/password/reset.twig b/resources/views/pages/password/reset.twig new file mode 100644 index 00000000..289152ea --- /dev/null +++ b/resources/views/pages/password/reset.twig @@ -0,0 +1,32 @@ +{% extends 'layouts/app.twig' %} +{% import 'macros/base.twig' as m %} +{% import 'macros/form.twig' as f %} + +{% block title %}{{ __('Password recovery') }}{% endblock %} + +{% block content %} + <div class="container"> + <h1>{{ __('Password recovery') }}</h1> + + {% for message in errors|default([]) %} + {{ m.alert(__(message), 'danger') }} + {% endfor %} + + <div class="row"> + {% block row_content %} + <div class="col-md-8"> + <form action="" enctype="multipart/form-data" method="post"> + {{ csrf() }} + + {{ __('We will send you an e-mail with a password recovery link. Please use the email address you used for registration.') }} + {{ f.input('email', __('E-Mail'), 'email', true) }} + + <div class="form-group"> + {{ f.submit(__('Recover')) }} + </div> + </form> + </div> + {% endblock %} + </div> + </div> +{% endblock %} diff --git a/resources/views/pages/user-shifts.html b/resources/views/pages/user-shifts.html index 9ac501da..d5a98f80 100644 --- a/resources/views/pages/user-shifts.html +++ b/resources/views/pages/user-shifts.html @@ -55,12 +55,12 @@ <div class="col-md-6"> <button class="btn btn-info btn-sm hidden-print" style="margin-top: 20px; margin-bottom:10px" type="button" data-toggle="collapse" - data-target="#collapseRoomSelect" aria-expanded="false" - aria-controls="collapseRoomSelect" + data-target="#collapseShiftsFilterSelect" aria-expanded="true" + aria-controls="collapseShiftsFilterSelect" > collapse/show filters </button> - <div class="collapse in" id="collapseRoomSelect"> + <div class="collapse in" id="collapseShiftsFilterSelect"> <div class="row"> <div class="col-xs-4 col-xxs-12">%room_select%</div> <div class="col-xs-4 col-xxs-12">%type_select%</div> @@ -79,5 +79,5 @@ %shifts_table% <div class="hidden-print"> -%ical_text% + %ical_text% </div>
\ No newline at end of file |