mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-05 20:22:07 +00:00
First set of code for new layout based on AdminLTE 3.0
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
/node_modules
|
||||
/frontend/node_modules
|
||||
/frontend/fonts
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
|
20
frontend/build.sh
Executable file
20
frontend/build.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# build translations.
|
||||
php /sites/tools/firefly-iii-tools/cli.php ff3:json-translations --v2
|
||||
|
||||
# remove old stuff
|
||||
rm -rf public/
|
||||
rm -rf ../public/fonts
|
||||
rm -rf ../public/v2/js
|
||||
rm -rf ../public/v2/css
|
||||
|
||||
# build new stuff
|
||||
npm run prod
|
||||
|
||||
# move to right directory
|
||||
mv public/js ../public/v2
|
||||
mv public/css ../public/v2
|
||||
|
||||
# also copy fonts
|
||||
cp -r fonts ../public
|
9
frontend/mix-manifest.json
Normal file
9
frontend/mix-manifest.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"/public/js/dashboard.js": "/public/js/dashboard.js",
|
||||
"/public/css/app.css": "/public/css/app.css",
|
||||
"/public/js/dashboard.js.map": "/public/js/dashboard.js.map",
|
||||
"/public/js/manifest.js": "/public/js/manifest.js",
|
||||
"/public/js/manifest.js.map": "/public/js/manifest.js.map",
|
||||
"/public/js/vendor.js": "/public/js/vendor.js",
|
||||
"/public/js/vendor.js.map": "/public/js/vendor.js.map"
|
||||
}
|
10356
frontend/package-lock.json
generated
Executable file
10356
frontend/package-lock.json
generated
Executable file
File diff suppressed because it is too large
Load Diff
35
frontend/package.json
Executable file
35
frontend/package.json
Executable file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run development",
|
||||
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||
"watch": "npm run development -- --watch",
|
||||
"watch-poll": "npm run watch -- --watch-poll",
|
||||
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||
"prod": "npm run production",
|
||||
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"axios": "^0.19",
|
||||
"cross-env": "^7.0",
|
||||
"laravel-mix": "^5.0.1",
|
||||
"laravel-mix-bundle-analyzer": "^1.0.5",
|
||||
"lodash": "^4.17.13",
|
||||
"resolve-url-loader": "^3.1.0",
|
||||
"sass": "^1.15.2",
|
||||
"sass-loader": "^8.0.0",
|
||||
"vue": "^2.6",
|
||||
"vue-i18n": "^8.15",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^5.13.0",
|
||||
"@popperjs/core": "^2.4.2",
|
||||
"bootstrap": "^4.5.0",
|
||||
"icheck-bootstrap": "^3.0.1",
|
||||
"jquery": "^3.5.1",
|
||||
"jquery-ui": "^1.12.1",
|
||||
"overlayscrollbars": "^1.12.0",
|
||||
"popper.js": "^1.16.1"
|
||||
}
|
||||
}
|
14
frontend/src/app.scss
vendored
Normal file
14
frontend/src/app.scss
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
// Fonts
|
||||
@import '~@fortawesome/fontawesome-free/css/all.css';
|
||||
// OverlayScrollbars
|
||||
@import '~overlayscrollbars/css/OverlayScrollbars.css';
|
||||
// iCheck
|
||||
@import '~icheck-bootstrap/icheck-bootstrap.css';
|
||||
// AdminLTE
|
||||
@import 'dist/css/adminlte.css';
|
||||
|
||||
|
||||
|
||||
// Bootstrap
|
||||
// Already imported by AdminLTE
|
||||
//@import '~bootstrap/scss/bootstrap';
|
34
frontend/src/bootstrap.js
vendored
Normal file
34
frontend/src/bootstrap.js
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
// imports
|
||||
import Vue from 'vue';
|
||||
import VueI18n from 'vue-i18n'
|
||||
import * as uiv from 'uiv';
|
||||
|
||||
// export jquery for others scripts to use
|
||||
window.$ = window.jQuery = require('jquery');
|
||||
|
||||
// axios
|
||||
window.axios = require('axios');
|
||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||
|
||||
// CSRF
|
||||
let token = document.head.querySelector('meta[name="csrf-token"]');
|
||||
|
||||
if (token) {
|
||||
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
|
||||
} else {
|
||||
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
|
||||
}
|
||||
|
||||
// admin stuff
|
||||
require('jquery-ui');
|
||||
require('bootstrap');
|
||||
|
||||
require('./dist/js/adminlte');
|
||||
require('overlayscrollbars');
|
||||
|
||||
// vue
|
||||
window.vuei18n = VueI18n;
|
||||
window.uiv =uiv;
|
||||
Vue.use(vuei18n);
|
||||
Vue.use(uiv);
|
||||
window.Vue = Vue;
|
1867
frontend/src/classic/adminlte.js
vendored
Normal file
1867
frontend/src/classic/adminlte.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
56
frontend/src/components/dashboard/Dashboard.vue
Normal file
56
frontend/src/components/dashboard/Dashboard.vue
Normal file
@@ -0,0 +1,56 @@
|
||||
<!--
|
||||
- ExampleComponent.vue
|
||||
- Copyright (c) 2019 james@firefly-iii.org
|
||||
-
|
||||
- This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
-
|
||||
- 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; without 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 <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<template>
|
||||
<top-boxes />
|
||||
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-8 col-md-offset-2">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">Example Component</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
Dropdown button
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="#">Action</a>
|
||||
<a class="dropdown-item" href="#">Another action</a>
|
||||
<a class="dropdown-item" href="#">Something else here</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "Dashboard",
|
||||
mounted() {
|
||||
console.log('Dashboard mounted.')
|
||||
}
|
||||
}
|
||||
</script>
|
73
frontend/src/components/dashboard/TopBoxes.vue
Normal file
73
frontend/src/components/dashboard/TopBoxes.vue
Normal file
@@ -0,0 +1,73 @@
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box">
|
||||
<span class="info-box-icon bg-info elevation-1"><i class="fas fa-cog"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{ $t("firefly.balance") }}</span>
|
||||
<span class="info-box-number">
|
||||
xxxxxxx
|
||||
<small>xx</small>
|
||||
</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box mb-3">
|
||||
<span class="info-box-icon bg-danger elevation-1"><i class="fas fa-thumbs-up"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{ $t('firefly.bills_to_pay') }}</span>
|
||||
<span class="info-box-number">xxxxxx</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
|
||||
<!-- fix for small devices only -->
|
||||
<div class="clearfix hidden-md-up"></div>
|
||||
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box mb-3">
|
||||
<span class="info-box-icon bg-success elevation-1"><i class="fas fa-shopping-cart"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{ $t('firefly.left_to_spend') }}</span>
|
||||
<span class="info-box-number">xxxxx</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-12 col-sm-6 col-md-3">
|
||||
<div class="info-box mb-3">
|
||||
<span class="info-box-icon bg-warning elevation-1"><i class="fas fa-users"></i></span>
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="info-box-text">{{ $t('firefly.net_worth') }}</span>
|
||||
<span class="info-box-number">xxxxx</span>
|
||||
</div>
|
||||
<!-- /.info-box-content -->
|
||||
</div>
|
||||
<!-- /.info-box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "TopBoxes"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
27
frontend/src/i18n.js
vendored
Normal file
27
frontend/src/i18n.js
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
// Create VueI18n instance with options
|
||||
module.exports = new vuei18n({
|
||||
locale: document.documentElement.lang, // set locale
|
||||
fallbackLocale: 'en',
|
||||
messages: {
|
||||
'cs': require('./locales/cs.json'),
|
||||
'de': require('./locales/de.json'),
|
||||
'en': require('./locales/en.json'),
|
||||
'es': require('./locales/es.json'),
|
||||
'el': require('./locales/el.json'),
|
||||
'fr': require('./locales/fr.json'),
|
||||
'hu': require('./locales/hu.json'),
|
||||
'id': require('./locales/id.json'),
|
||||
'it': require('./locales/it.json'),
|
||||
'nl': require('./locales/nl.json'),
|
||||
'nb': require('./locales/nb.json'),
|
||||
'pl': require('./locales/pl.json'),
|
||||
'fi': require('./locales/fi.json'),
|
||||
'pt-br': require('./locales/pt-br.json'),
|
||||
'ro': require('./locales/ro.json'),
|
||||
'ru': require('./locales/ru.json'),
|
||||
'zh-tw': require('./locales/zh-tw.json'),
|
||||
'zh-cn': require('./locales/zh-cn.json'),
|
||||
'sv': require('./locales/sv.json'),
|
||||
'vi': require('./locales/vi.json'),
|
||||
}
|
||||
});
|
11
frontend/src/locales/cs.json
Normal file
11
frontend/src/locales/cs.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Z\u016fstatek",
|
||||
"bills_to_pay": "Faktury k zaplacen\u00ed",
|
||||
"left_to_spend": "Zb\u00fdv\u00e1 k utracen\u00ed",
|
||||
"net_worth": "\u010cist\u00e9 jm\u011bn\u00ed"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "cs"
|
||||
}
|
||||
}
|
11
frontend/src/locales/de.json
Normal file
11
frontend/src/locales/de.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Kontostand",
|
||||
"bills_to_pay": "Unbezahlte Rechnungen",
|
||||
"left_to_spend": "Verbleibend zum Ausgeben",
|
||||
"net_worth": "Eigenkapital"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "de"
|
||||
}
|
||||
}
|
11
frontend/src/locales/el.json
Normal file
11
frontend/src/locales/el.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "\u0399\u03c3\u03bf\u03b6\u03cd\u03b3\u03b9\u03bf",
|
||||
"bills_to_pay": "\u03a0\u03ac\u03b3\u03b9\u03b1 \u03ad\u03be\u03bf\u03b4\u03b1 \u03c0\u03c1\u03bf\u03c2 \u03c0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ae",
|
||||
"left_to_spend": "\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b1 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ce\u03bd",
|
||||
"net_worth": "\u039a\u03b1\u03b8\u03b1\u03c1\u03ae \u03b1\u03be\u03af\u03b1"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "el"
|
||||
}
|
||||
}
|
11
frontend/src/locales/en.json
Normal file
11
frontend/src/locales/en.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Balance",
|
||||
"bills_to_pay": "Bills to pay",
|
||||
"left_to_spend": "Left to spend",
|
||||
"net_worth": "Net worth"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "en"
|
||||
}
|
||||
}
|
11
frontend/src/locales/es.json
Normal file
11
frontend/src/locales/es.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Balance",
|
||||
"bills_to_pay": "Facturas por pagar",
|
||||
"left_to_spend": "Disponible para gastar",
|
||||
"net_worth": "Valor Neto"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "es"
|
||||
}
|
||||
}
|
11
frontend/src/locales/fi.json
Normal file
11
frontend/src/locales/fi.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Saldo",
|
||||
"bills_to_pay": "Laskuja maksettavana",
|
||||
"left_to_spend": "K\u00e4ytett\u00e4viss\u00e4",
|
||||
"net_worth": "Varallisuus"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "fi"
|
||||
}
|
||||
}
|
11
frontend/src/locales/fr.json
Normal file
11
frontend/src/locales/fr.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Solde",
|
||||
"bills_to_pay": "Factures \u00e0 payer",
|
||||
"left_to_spend": "Reste \u00e0 d\u00e9penser",
|
||||
"net_worth": "Avoir net"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "fr"
|
||||
}
|
||||
}
|
11
frontend/src/locales/hu.json
Normal file
11
frontend/src/locales/hu.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Egyenleg",
|
||||
"bills_to_pay": "Fizetend\u0151 sz\u00e1ml\u00e1k",
|
||||
"left_to_spend": "Elk\u00f6lthet\u0151",
|
||||
"net_worth": "Nett\u00f3 \u00e9rt\u00e9k"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "hu"
|
||||
}
|
||||
}
|
11
frontend/src/locales/id.json
Normal file
11
frontend/src/locales/id.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Keseimbangan",
|
||||
"bills_to_pay": "Bills untuk membayar",
|
||||
"left_to_spend": "Kiri untuk dibelanjakan",
|
||||
"net_worth": "Nilai bersih"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "id"
|
||||
}
|
||||
}
|
11
frontend/src/locales/it.json
Normal file
11
frontend/src/locales/it.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Saldo",
|
||||
"bills_to_pay": "Bollette da pagare",
|
||||
"left_to_spend": "Altro da spendere",
|
||||
"net_worth": "Patrimonio"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "it"
|
||||
}
|
||||
}
|
11
frontend/src/locales/nb.json
Normal file
11
frontend/src/locales/nb.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Saldo",
|
||||
"bills_to_pay": "Regninger \u00e5 betale",
|
||||
"left_to_spend": "Igjen \u00e5 bruke",
|
||||
"net_worth": "Formue"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "nb"
|
||||
}
|
||||
}
|
11
frontend/src/locales/nl.json
Normal file
11
frontend/src/locales/nl.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Saldo",
|
||||
"bills_to_pay": "Openstaande contracten",
|
||||
"left_to_spend": "Over om uit te geven",
|
||||
"net_worth": "Kapitaal"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "nl"
|
||||
}
|
||||
}
|
11
frontend/src/locales/pl.json
Normal file
11
frontend/src/locales/pl.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Saldo",
|
||||
"bills_to_pay": "Rachunki do zap\u0142acenia",
|
||||
"left_to_spend": "Pozosta\u0142o do wydania",
|
||||
"net_worth": "Warto\u015b\u0107 netto"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "pl"
|
||||
}
|
||||
}
|
11
frontend/src/locales/pt-br.json
Normal file
11
frontend/src/locales/pt-br.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Saldo",
|
||||
"bills_to_pay": "Faturas a pagar",
|
||||
"left_to_spend": "Restante para gastar",
|
||||
"net_worth": "Valor L\u00edquido"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "pt-br"
|
||||
}
|
||||
}
|
11
frontend/src/locales/ro.json
Normal file
11
frontend/src/locales/ro.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Balant\u0103",
|
||||
"bills_to_pay": "Facturile de plat\u0103",
|
||||
"left_to_spend": "Ramas de cheltuit",
|
||||
"net_worth": "Valoarea net\u0103"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "ro"
|
||||
}
|
||||
}
|
11
frontend/src/locales/ru.json
Normal file
11
frontend/src/locales/ru.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "\u0411a\u043ba\u043dc",
|
||||
"bills_to_pay": "\u0421\u0447\u0435\u0442\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435",
|
||||
"left_to_spend": "\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c",
|
||||
"net_worth": "\u041c\u043e\u0438 \u0441\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u044f"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "ru"
|
||||
}
|
||||
}
|
11
frontend/src/locales/sv.json
Normal file
11
frontend/src/locales/sv.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Saldo",
|
||||
"bills_to_pay": "Notor att betala",
|
||||
"left_to_spend": "\u00c5terst\u00e5r att spendera",
|
||||
"net_worth": "Nettof\u00f6rm\u00f6genhet"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "sv"
|
||||
}
|
||||
}
|
11
frontend/src/locales/tr.json
Normal file
11
frontend/src/locales/tr.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Denge",
|
||||
"bills_to_pay": "\u00d6denecek fatura",
|
||||
"left_to_spend": "Harcama i\u00e7in b\u0131rak\u0131ld\u0131",
|
||||
"net_worth": "Net de\u011fer"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "tr"
|
||||
}
|
||||
}
|
11
frontend/src/locales/vi.json
Normal file
11
frontend/src/locales/vi.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "Ti\u1ec1n c\u00f2n l\u1ea1i",
|
||||
"bills_to_pay": "H\u00f3a \u0111\u01a1n ph\u1ea3i tr\u1ea3",
|
||||
"left_to_spend": "C\u00f2n l\u1ea1i \u0111\u1ec3 chi ti\u00eau",
|
||||
"net_worth": "T\u00e0i s\u1ea3n th\u1ef1c"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "vi"
|
||||
}
|
||||
}
|
11
frontend/src/locales/zh-cn.json
Normal file
11
frontend/src/locales/zh-cn.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "\u4f59\u989d",
|
||||
"bills_to_pay": "\u5f85\u4ed8\u5e10\u5355",
|
||||
"left_to_spend": "\u5269\u4f59\u53ef\u82b1\u8d39",
|
||||
"net_worth": "\u51c0\u503c"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "zh-cn"
|
||||
}
|
||||
}
|
11
frontend/src/locales/zh-tw.json
Normal file
11
frontend/src/locales/zh-tw.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"firefly": {
|
||||
"balance": "\u9918\u984d",
|
||||
"bills_to_pay": "\u5f85\u4ed8\u5e33\u55ae",
|
||||
"left_to_spend": "\u5269\u9918\u53ef\u82b1\u8cbb",
|
||||
"net_worth": "\u6de8\u503c"
|
||||
},
|
||||
"config": {
|
||||
"html_language": "zh-tw"
|
||||
}
|
||||
}
|
26
frontend/src/pages/dashboard.js
vendored
Normal file
26
frontend/src/pages/dashboard.js
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
import Dashboard from "../components/dashboard/Dashboard";
|
||||
import TopBoxes from "../components/dashboard/TopBoxes";
|
||||
|
||||
/**
|
||||
* First we will load Axios via bootstrap.js
|
||||
* jquery and bootstrap-sass preloaded in app.js
|
||||
* vue, uiv and vuei18n are in app_vue.js
|
||||
*/
|
||||
|
||||
require('../bootstrap');
|
||||
|
||||
// components as an example
|
||||
Vue.component('dashboard', Dashboard);
|
||||
Vue.component('top-boxes', TopBoxes);
|
||||
|
||||
// i18n
|
||||
let i18n = require('../i18n');
|
||||
|
||||
let props = {};
|
||||
new Vue({
|
||||
i18n,
|
||||
el: "#dashboard",
|
||||
render: (createElement) => {
|
||||
return createElement(Dashboard, { props: props });
|
||||
},
|
||||
});
|
44
frontend/webpack.mix.js
vendored
Normal file
44
frontend/webpack.mix.js
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
const mix = require('laravel-mix');
|
||||
require('laravel-mix-bundle-analyzer');
|
||||
|
||||
|
||||
// production
|
||||
mix.webpackConfig({
|
||||
resolve: {
|
||||
alias: {
|
||||
'vue$': 'vue/dist/vue.runtime.common.js'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mix
|
||||
// AUTO LOAD
|
||||
// .autoload({
|
||||
// jquery: ['$', 'window.jQuery','jQuery']
|
||||
// })
|
||||
|
||||
// MIX IN CLASSIC SCRIPT
|
||||
// .babel([
|
||||
// '../resources/assets/js/v2/classic/adminlte.js',
|
||||
// ], 'public/v2/js/classic.js')
|
||||
|
||||
// MIX IN CLASSIC SCRIPT
|
||||
// .scripts([
|
||||
// '../resources/assets/js/v2/classic/adminlte.js',
|
||||
// ], 'public/v2/js/classic.js')
|
||||
|
||||
|
||||
// COPY SCRIPT
|
||||
//.copy('../resources/assets/js/v2/classic/adminlte.js', 'public/v2/js/classic.js')
|
||||
|
||||
// dashboard component (frontpage):
|
||||
.js('src/pages/dashboard.js', 'public/js')
|
||||
|
||||
|
||||
|
||||
.extract().sourceMaps()
|
||||
.sass('src/app.scss', 'public/css');
|
||||
|
||||
if (!mix.inProduction()) {
|
||||
mix.bundleAnalyzer();
|
||||
}
|
2
resources/assets/js/create_transaction.js
vendored
2
resources/assets/js/create_transaction.js
vendored
@@ -42,7 +42,7 @@ import Budget from "./components/transactions/Budget";
|
||||
* vue, uiv and vuei18n are in app_vue.js
|
||||
*/
|
||||
|
||||
require('./bootstrap');
|
||||
require('./bootstrap');
|
||||
|
||||
// components for create and edit transactions.
|
||||
Vue.component('budget', Budget);
|
||||
|
101
resources/views/v2/auth/login.twig
Normal file
101
resources/views/v2/auth/login.twig
Normal file
@@ -0,0 +1,101 @@
|
||||
{% extends "./layout/auth" %}
|
||||
{% block content %}
|
||||
{# error when logging in #}
|
||||
{% if errors.has('email') %}
|
||||
<div class="row">
|
||||
<div class="alert alert-danger alert-dismissible">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<h5><i class="icon fas fa-ban"></i> {{ 'flash_error'|_ }}</h5>
|
||||
{{ errors.get('email')[0] }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# error when logout force #}
|
||||
{% if session('logoutMessage') %}
|
||||
<div class="row">
|
||||
<div class="alert alert-info alert-dismissible">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<h5><i class="icon fas fa-info"></i>
|
||||
{{ session('logoutMessage') }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# default header #}
|
||||
<div class="login-box">
|
||||
<div class="login-logo">
|
||||
<img src="v2/images/logo-small.png" alt="Firefly III" width="40"/>
|
||||
<a href="{{ route('index') }}"><b>Firefly</b>III</a>
|
||||
</div>
|
||||
|
||||
{# demo site info #}
|
||||
{% if IS_DEMO_SITE %}
|
||||
<div class="callout callout-success">
|
||||
<h5><i class="fas fa-info"></i> Firefly III demonistration website</h5>
|
||||
To log in, please use email address <code>{{ DEMO_USERNAME }}</code> and password <code>{{ DEMO_PASSWORD }}</code>
|
||||
</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.login_provider') == 'eloquent' %}
|
||||
<input type="email" required autocomplete="email" name="email" value="{{ email }}" class="form-control"
|
||||
placeholder="{{ trans('form.email') }}"/>
|
||||
{% else %}
|
||||
<input type="text" required autocomplete="username" name="email" value="{{ email }}" class="form-control"
|
||||
placeholder="{{ trans('form.login_name') }}"/>
|
||||
{% endif %}
|
||||
<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" name="password" required autocomplete="current-password" 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-8">
|
||||
<div class="icheck-primary">
|
||||
<input id="remember" type="checkbox" name="remember" {% if remember %}checked="checked"{% endif %} value="1">
|
||||
<label for="remember">
|
||||
{{ trans('form.remember_me') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-4">
|
||||
<button type="submit" class="btn btn-primary btn-block">{{ 'sign_in'|_ }}</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
</form>
|
||||
{% if allowReset %}
|
||||
<p class="mb-1">
|
||||
<a href="{{ URL.to('/password/reset') }}">{{ 'forgot_my_password'|_ }}</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if allowRegistration %}
|
||||
<p class="mb-0">
|
||||
<a href="{{ URL.to('/register') }}">{{ 'register_new_account'|_ }}</a><br>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- /.login-card-body -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.login-box -->
|
||||
{% endblock %}
|
16
resources/views/v2/index.twig
Normal file
16
resources/views/v2/index.twig
Normal file
@@ -0,0 +1,16 @@
|
||||
{% extends "./layout/default" %}
|
||||
{% block content %}
|
||||
<!-- Small boxes (Stat box) -->
|
||||
|
||||
<!-- Main row -->
|
||||
<div id="dashboard"></div>
|
||||
<!-- /.row (main row) -->
|
||||
{% endblock %}
|
||||
|
||||
{% block styles %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script src="v2/js/dashboard.js" nonce="{{ JS_NONCE }}"></script>
|
||||
{% endblock %}
|
98
resources/views/v2/layout/default.twig
Normal file
98
resources/views/v2/layout/default.twig
Normal file
@@ -0,0 +1,98 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<base href="{{ route('index') }}/">
|
||||
<meta charset="utf-8">
|
||||
<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">
|
||||
<title>
|
||||
{% if subTitle %}
|
||||
{{ subTitle }} »
|
||||
{% endif %}
|
||||
{% if title != "Firefly III" %}
|
||||
{{ title }} »
|
||||
{% endif %}
|
||||
|
||||
Firefly III
|
||||
|
||||
</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="v2/plugins/local-fonts/gf-source.css">
|
||||
<link rel="stylesheet" href="v2/css/app.css">
|
||||
</head>
|
||||
<body class="hold-transition sidebar-mini layout-fixed">
|
||||
<div class="wrapper">
|
||||
|
||||
<!-- Navbar -->
|
||||
{% include('partials.layout.navbar') %}
|
||||
|
||||
<!-- Main Sidebar Container -->
|
||||
{% include('partials.layout.sidebar') %}
|
||||
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<div class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1 class="m-0 text-dark">{% if mainTitleIcon %}<i class="fa fas {{ mainTitleIcon }}"></i>{% endif %}
|
||||
{{ title }} <small class="text-muted">
|
||||
{% if subTitleIcon %}<i class="fa fas {{ subTitleIcon }}"></i>{% endif %}
|
||||
{{ subTitle }}</small></h1>
|
||||
</div><!-- /.col -->
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item active">Bread crumbs v1</li>
|
||||
</ol>
|
||||
</div><!-- /.col -->
|
||||
</div><!-- /.row -->
|
||||
</div><!-- /.container-fluid -->
|
||||
</div>
|
||||
<!-- /.content-header -->
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
{% block content %}{% endblock %}
|
||||
</div><!-- /.container-fluid -->
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
</div>
|
||||
<!-- /.content-wrapper -->
|
||||
{% include('partials.layout.footer') %}
|
||||
|
||||
<!-- Control Sidebar -->
|
||||
<aside class="control-sidebar control-sidebar-dark">
|
||||
<!-- Control sidebar content goes here -->
|
||||
bla bla bla
|
||||
</aside>
|
||||
<!-- /.control-sidebar -->
|
||||
</div>
|
||||
<!-- ./wrapper -->
|
||||
|
||||
<script src="v2/js/manifest.js" nonce="{{ JS_NONCE }}"></script>
|
||||
<script src="v2/js/vendor.js" nonce="{{ JS_NONCE }}"></script>
|
||||
{% block scripts %}{% endblock %}
|
||||
|
||||
<!-- jQuery -->
|
||||
<!--<script src="v2/plugins/jquery/jquery.min.js" nonce="{{ JS_NONCE }}"></script>-->
|
||||
<!-- jQuery UI 1.11.4 -->
|
||||
<!--<script src="v2/plugins/jquery-ui/jquery-ui.min.js" nonce="{{ JS_NONCE }}"></script>-->
|
||||
<!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
|
||||
<!--<script nonce="{{ JS_NONCE }}">
|
||||
$.widget.bridge('uibutton', $.ui.button)
|
||||
</script>
|
||||
-->
|
||||
<!-- Bootstrap 4 -->
|
||||
<!--<script src="v2/plugins/bootstrap/js/bootstrap.bundle.min.js" nonce="{{ JS_NONCE }}"></script>-->
|
||||
<!-- overlayScrollbars -->
|
||||
<!--<script src="v2/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js" nonce="{{ JS_NONCE }}"></script>-->
|
||||
<!-- AdminLTE App -->
|
||||
<!--<script src="v2/dist/js/adminlte.js" nonce="{{ JS_NONCE }}"></script>-->
|
||||
</body>
|
||||
</html>
|
||||
|
7
resources/views/v2/partials/layout/footer.twig
Normal file
7
resources/views/v2/partials/layout/footer.twig
Normal file
@@ -0,0 +1,7 @@
|
||||
<footer class="main-footer">
|
||||
|
||||
<small><a href="https://firefly-iii.org/">Firefly III</a> © James Cole, <a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0-or-later</a></small>
|
||||
<div class="float-right d-none d-sm-inline-block">
|
||||
<b>{{ 'version'|_ }}</b> <a href="{{ route('debug') }}">{{ Config.get('firefly.version') }}</a>
|
||||
</div>
|
||||
</footer>
|
113
resources/views/v2/partials/layout/navbar.twig
Normal file
113
resources/views/v2/partials/layout/navbar.twig
Normal file
@@ -0,0 +1,113 @@
|
||||
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
|
||||
<!-- Left navbar links -->
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- SEARCH FORM -->
|
||||
<form class="form-inline ml-3">
|
||||
<div class="input-group input-group-sm">
|
||||
<input class="form-control form-control-navbar" type="search" placeholder="Search" aria-label="Search">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-navbar" type="submit">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- Right navbar links -->
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<!-- Messages Dropdown Menu -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link" data-toggle="dropdown" href="#">
|
||||
<i class="far fa-calendar-alt"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
|
||||
<a href="#" class="dropdown-item">
|
||||
<!-- Message Start -->
|
||||
<div class="media">
|
||||
<img src="v2/dist/img/user1-128x128.jpg" alt="User Avatar" class="img-size-50 mr-3 img-circle">
|
||||
<div class="media-body">
|
||||
<h3 class="dropdown-item-title">
|
||||
Brad Diesel
|
||||
<span class="float-right text-sm text-danger"><i class="fas fa-star"></i></span>
|
||||
</h3>
|
||||
<p class="text-sm">Call me whenever you can...</p>
|
||||
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Message End -->
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="dropdown-item">
|
||||
<!-- Message Start -->
|
||||
<div class="media">
|
||||
<img src="v2/dist/img/user8-128x128.jpg" alt="User Avatar" class="img-size-50 img-circle mr-3">
|
||||
<div class="media-body">
|
||||
<h3 class="dropdown-item-title">
|
||||
John Pierce
|
||||
<span class="float-right text-sm text-muted"><i class="fas fa-star"></i></span>
|
||||
</h3>
|
||||
<p class="text-sm">I got your message bro</p>
|
||||
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Message End -->
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="dropdown-item">
|
||||
<!-- Message Start -->
|
||||
<div class="media">
|
||||
<img src="v2/dist/img/user3-128x128.jpg" alt="User Avatar" class="img-size-50 img-circle mr-3">
|
||||
<div class="media-body">
|
||||
<h3 class="dropdown-item-title">
|
||||
Nora Silvester
|
||||
<span class="float-right text-sm text-warning"><i class="fas fa-star"></i></span>
|
||||
</h3>
|
||||
<p class="text-sm">The subject goes here</p>
|
||||
<p class="text-sm text-muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Message End -->
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="dropdown-item dropdown-footer">See All Messages</a>
|
||||
</div>
|
||||
</li>
|
||||
<!-- Notifications Dropdown Menu -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link" data-toggle="dropdown" href="#">
|
||||
<i class="far fa-user"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
|
||||
<span class="dropdown-item dropdown-header">15 Notifications</span>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="dropdown-item">
|
||||
<i class="fas fa-envelope mr-2"></i> 4 new messages
|
||||
<span class="float-right text-muted text-sm">3 mins</span>
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="dropdown-item">
|
||||
<i class="fas fa-users mr-2"></i> 8 friend requests
|
||||
<span class="float-right text-muted text-sm">12 hours</span>
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="dropdown-item">
|
||||
<i class="fas fa-file mr-2"></i> 3 new reports
|
||||
<span class="float-right text-muted text-sm">2 days</span>
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#" class="dropdown-item dropdown-footer">See All Notifications</a>
|
||||
</div>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button">
|
||||
<i class="fas fa-th-large"></i>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<!-- /.navbar -->
|
254
resources/views/v2/partials/layout/sidebar.twig
Normal file
254
resources/views/v2/partials/layout/sidebar.twig
Normal file
@@ -0,0 +1,254 @@
|
||||
<aside class="main-sidebar sidebar-dark-primary elevation-4">
|
||||
<!-- Brand Logo -->
|
||||
<a href="{{ route('index') }}" class="brand-link">
|
||||
<img src="v2/dist/img/firefly-iii-logo.png" alt="Firefly III" class="brand-image"
|
||||
style="opacity: .8"> <!-- img-circle elevation-3 -->
|
||||
<span class="brand-text font-weight-light">Firefly III</span>
|
||||
</a>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="sidebar">
|
||||
<!-- Sidebar user panel (optional) -->
|
||||
<!--
|
||||
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
|
||||
<div class="image">
|
||||
<img src="v2/dist/img/user2-160x160.jpg" class="img-circle elevation-2" alt="User Image">
|
||||
</div>
|
||||
<div class="info">
|
||||
<a href="#" class="d-block">Alexander Pierce</a>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<!-- Sidebar Menu -->
|
||||
<nav class="mt-2">
|
||||
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
|
||||
<!-- Add icons to the links using the .nav-icon class
|
||||
with font-awesome or any other icon font library -->
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('index') }}" class="nav-link">
|
||||
<i class="nav-icon fas fa-tachometer-alt"></i>
|
||||
<p>
|
||||
{{ 'dashboard'|_ }}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-header text-uppercase">{{ 'financial_control'|_ }}</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('budgets.index') }}" class="nav-link">
|
||||
<i class="nav-icon fas fa-chart-pie"></i>
|
||||
<p>
|
||||
{{ 'budgets'|_ }}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('bills.index') }}" class="nav-link">
|
||||
<i class="nav-icon far fa-calendar-alt"></i>
|
||||
<p>
|
||||
{{ 'bills'|_ }}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('piggy-banks.index') }}" class="nav-link">
|
||||
<i class="nav-icon fas fa-bullseye"></i>
|
||||
<p>
|
||||
{{ 'piggyBanks'|_ }}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-header text-uppercase">{{ 'accounting'|_ }}</li>
|
||||
|
||||
<li class="nav-item has-treeview">
|
||||
<a href="#" class="nav-link">
|
||||
<i class="nav-icon fas fa-exchange-alt"></i>
|
||||
<p>
|
||||
{{ 'transactions'|_ }}
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
<ul class="nav nav-treeview">
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('transactions.index', 'withdrawal') }}" class="nav-link">
|
||||
<i class="fas fa-long-arrow-alt-left nav-icon"></i>
|
||||
<p>{{ 'expenses'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('transactions.index', 'deposit') }}" class="nav-link">
|
||||
<i class="fas fa-long-arrow-alt-right nav-icon"></i>
|
||||
<p>{{ 'income'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('transactions.index', 'transfers') }}" class="nav-link">
|
||||
<i class="fas fa-exchange-alt nav-icon"></i>
|
||||
<p>{{ 'transfers'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="nav-item has-treeview">
|
||||
<a href="#" class="nav-link">
|
||||
<i class="nav-icon fas fa-microchip"></i>
|
||||
<p>
|
||||
{{ 'automation'|_ }}
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
<ul class="nav nav-treeview">
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('rules.index') }}" class="nav-link">
|
||||
<i class="fas fa-random nav-icon"></i>
|
||||
<p>{{ 'rules'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('recurring.index') }}" class="nav-link">
|
||||
<i class="fas fa-magic nav-icon"></i>
|
||||
<p>{{ 'recurrences'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="nav-header text-uppercase">{{ 'others'|_ }}</li>
|
||||
|
||||
<li class="nav-item has-treeview">
|
||||
<a href="#" class="nav-link">
|
||||
<i class="nav-icon fas fa-credit-card"></i>
|
||||
<p>
|
||||
{{ 'accounts'|_ }}
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
<ul class="nav nav-treeview">
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('accounts.index', 'asset') }}" class="nav-link">
|
||||
<i class="far fa-money-bill-alt nav-icon"></i>
|
||||
<p>{{ 'asset_accounts'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('accounts.index', 'expense') }}" class="nav-link">
|
||||
<i class="fas fa-shopping-cart nav-icon"></i>
|
||||
<p>{{ 'expense_accounts'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('accounts.index', 'revenue') }}" class="nav-link">
|
||||
<i class="fas fa-briefcase nav-icon"></i>
|
||||
<p>{{ 'revenue_accounts'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('accounts.index', 'liabilities') }}" class="nav-link">
|
||||
<i class="far fa-funnel-dollar nav-icon"></i>
|
||||
<p>{{ 'liabilities_accounts'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="nav-item has-treeview">
|
||||
<a href="#" class="nav-link">
|
||||
<i class="nav-icon fas fa-tags"></i>
|
||||
<p>
|
||||
{{ 'classification'|_ }}
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
<ul class="nav nav-treeview">
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('categories.index') }}" class="nav-link">
|
||||
<i class="fas fa-bookmark nav-icon"></i>
|
||||
<p>{{ 'categories'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('tags.index') }}" class="nav-link">
|
||||
<i class="fas fa-tags nav-icon"></i>
|
||||
<p>{{ 'tags'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('reports.index') }}" class="nav-link">
|
||||
<i class="nav-icon far fa-chart-bar"></i>
|
||||
<p>
|
||||
{{ 'reports'|_ }}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('export.index') }}" class="nav-link">
|
||||
<i class="nav-icon fas fa-upload"></i>
|
||||
<p>
|
||||
{{ 'export_data_menu'|_ }}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item has-treeview">
|
||||
<a href="#" class="nav-link">
|
||||
<i class="nav-icon fas fa-sliders-h"></i>
|
||||
<p>
|
||||
{{ 'options'|_ }}
|
||||
<i class="right fas fa-angle-left"></i>
|
||||
</p>
|
||||
</a>
|
||||
<ul class="nav nav-treeview">
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('profile.index') }}" class="nav-link">
|
||||
<i class="far fa-user nav-icon"></i>
|
||||
<p>{{ 'profile'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('preferences.index') }}" class="nav-link">
|
||||
<i class="fas fa-cogs nav-icon"></i>
|
||||
<p>{{ 'preferences'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('currencies.index') }}" class="nav-link">
|
||||
<i class="fas fa-euro-sign nav-icon"></i>
|
||||
<p>{{ 'currencies'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
{% if hasRole('owner') %}
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('admin.index') }}" class="nav-link">
|
||||
<i class="far fa-hand-spock nav-icon"></i>
|
||||
<p>{{ 'administration'|_ }}</p>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('logout') }}" class="nav-link">
|
||||
<i class="nav-icon fas fa-sign-out-alt"></i>
|
||||
<p>
|
||||
{{ 'logout'|_ }}
|
||||
</p>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<!-- /.sidebar-menu -->
|
||||
</div>
|
||||
<!-- /.sidebar -->
|
||||
</aside>
|
Reference in New Issue
Block a user