diff --git a/.env.example b/.env.example
index 45c7fb9fec..71dd938bf4 100644
--- a/.env.example
+++ b/.env.example
@@ -163,9 +163,8 @@ SEND_ERROR_MESSAGE=true
# These messages contain (sensitive) transaction information:
SEND_REPORT_JOURNALS=true
-# Set this value to true if you want to set the location
-# of certain things, like transactions. Since this involves an external service, it's optional
-# and disabled by default.
+# Set this value to true if you want to set the location of certain things, like transactions.
+# Since this involves an external service, it's optional and disabled by default.
ENABLE_EXTERNAL_MAP=false
# Set this value to true if you want Firefly III to download currency exchange rates
diff --git a/app/Support/ExpandedForm.php b/app/Support/ExpandedForm.php
index 3c6e61716c..627da132e9 100644
--- a/app/Support/ExpandedForm.php
+++ b/app/Support/ExpandedForm.php
@@ -176,7 +176,7 @@ class ExpandedForm
$options = $this->expandOptionArray($name, $label, $options);
$classes = $this->getHolderClasses($name);
$value = $this->fillFieldValue($name, $value);
- $options['step'] = '1';
+ $options['step'] = $options['step'] ?? '1';
try {
$html = view('form.integer', compact('classes', 'name', 'label', 'value', 'options'))->render();
} catch (Throwable $e) {
@@ -242,65 +242,6 @@ class ExpandedForm
return $selectList;
}
- /**
- * @param string $name
- * @param mixed $value
- * @param array|null $options
- *
- * @return string
- * @throws FireflyException
- */
- public function nonSelectableAmount(string $name, $value = null, array $options = null): string
- {
- $label = $this->label($name, $options);
- $options = $this->expandOptionArray($name, $label, $options);
- $classes = $this->getHolderClasses($name);
- $value = $this->fillFieldValue($name, $value);
- $options['step'] = 'any';
- $selectedCurrency = $options['currency'] ?? Amt::getDefaultCurrency();
- unset($options['currency'], $options['placeholder']);
-
- // make sure value is formatted nicely:
- if (null !== $value && '' !== $value) {
- // $value = round((float)$value, $selectedCurrency->decimal_places);
- }
- try {
- $html = view('form.non-selectable-amount', compact('selectedCurrency', 'classes', 'name', 'label', 'value', 'options'))->render();
- } catch (Throwable $e) {
- Log::debug(sprintf('Could not render nonSelectableAmount(): %s', $e->getMessage()));
- $html = 'Could not render nonSelectableAmount.';
- throw new FireflyException($html, 0, $e);
- }
-
- return $html;
- }
-
- /**
- * @param string $name
- * @param mixed $value
- * @param array|null $options
- *
- * @return string
- * @throws FireflyException
- */
- public function number(string $name, $value = null, array $options = null): string
- {
- $label = $this->label($name, $options);
- $options = $this->expandOptionArray($name, $label, $options);
- $classes = $this->getHolderClasses($name);
- $value = $this->fillFieldValue($name, $value);
- $options['step'] = 'any';
- unset($options['placeholder']);
- try {
- $html = view('form.number', compact('classes', 'name', 'label', 'value', 'options'))->render();
- } catch (Throwable $e) {
- Log::debug(sprintf('Could not render number(): %s', $e->getMessage()));
- $html = 'Could not render number.';
- throw new FireflyException($html, 0, $e);
- }
-
- return $html;
- }
/**
* @param null $value
diff --git a/composer.json b/composer.json
index 0df59454dd..537b5bd479 100644
--- a/composer.json
+++ b/composer.json
@@ -93,7 +93,6 @@
"laravel/sanctum": "^3.2",
"laravel/slack-notification-channel": "^2.4",
"laravel/ui": "^4.2",
- "laravelcollective/html": "6.*",
"league/commonmark": "2.*",
"league/csv": "^9.7",
"league/fractal": "0.*",
@@ -103,6 +102,7 @@
"psr/log": "<4",
"ramsey/uuid": "^4.7",
"rcrowe/twigbridge": "^0.14",
+ "spatie/laravel-html": "^3.2",
"spatie/laravel-ignition": "^2",
"spatie/period": "^2.4",
"symfony/http-client": "^6.2",
diff --git a/composer.lock b/composer.lock
index 8d56175ffd..86d758d560 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "cc2447110d1ddec300550e2e41634217",
+ "content-hash": "4f792c06cb58d42c0cb6a8d027aefbf7",
"packages": [
{
"name": "bacon/bacon-qr-code",
@@ -472,16 +472,16 @@
},
{
"name": "doctrine/dbal",
- "version": "3.6.2",
+ "version": "3.6.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c"
+ "reference": "9a747d29e7e6b39509b8f1847e37a23a0163ea6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c",
- "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/9a747d29e7e6b39509b8f1847e37a23a0163ea6a",
+ "reference": "9a747d29e7e6b39509b8f1847e37a23a0163ea6a",
"shasum": ""
},
"require": {
@@ -494,12 +494,12 @@
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "doctrine/coding-standard": "11.1.0",
+ "doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2022.3",
- "phpstan/phpstan": "1.10.9",
+ "phpstan/phpstan": "1.10.14",
"phpstan/phpstan-strict-rules": "^1.5",
- "phpunit/phpunit": "9.6.6",
+ "phpunit/phpunit": "9.6.7",
"psalm/plugin-phpunit": "0.18.4",
"squizlabs/php_codesniffer": "3.7.2",
"symfony/cache": "^5.4|^6.0",
@@ -564,7 +564,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.6.2"
+ "source": "https://github.com/doctrine/dbal/tree/3.6.3"
},
"funding": [
{
@@ -580,29 +580,33 @@
"type": "tidelift"
}
],
- "time": "2023-04-14T07:25:38+00:00"
+ "time": "2023-06-01T05:46:46+00:00"
},
{
"name": "doctrine/deprecations",
- "version": "v1.1.0",
+ "version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "8cffffb2218e01f3b370bf763e00e81697725259"
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/8cffffb2218e01f3b370bf763e00e81697725259",
- "reference": "8cffffb2218e01f3b370bf763e00e81697725259",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
"shasum": ""
},
"require": {
- "php": "^7.1|^8.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
- "phpunit/phpunit": "^7.5|^8.5|^9.5",
- "psr/log": "^1|^2|^3"
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@@ -621,9 +625,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/v1.1.0"
+ "source": "https://github.com/doctrine/deprecations/tree/v1.1.1"
},
- "time": "2023-05-29T18:55:17+00:00"
+ "time": "2023-06-03T09:27:29+00:00"
},
{
"name": "doctrine/event-manager",
@@ -1937,16 +1941,16 @@
},
{
"name": "laravel/framework",
- "version": "v10.13.0",
+ "version": "v10.13.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "7322723585103082758d74917db62980684845cb"
+ "reference": "c1569099594168870cb4bdabfbaa35e5d172310b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/7322723585103082758d74917db62980684845cb",
- "reference": "7322723585103082758d74917db62980684845cb",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/c1569099594168870cb4bdabfbaa35e5d172310b",
+ "reference": "c1569099594168870cb4bdabfbaa35e5d172310b",
"shasum": ""
},
"require": {
@@ -2133,7 +2137,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2023-05-30T14:46:25+00:00"
+ "time": "2023-06-02T13:13:10+00:00"
},
{
"name": "laravel/passport",
@@ -2462,79 +2466,6 @@
},
"time": "2023-05-09T19:47:28+00:00"
},
- {
- "name": "laravelcollective/html",
- "version": "v6.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/LaravelCollective/html.git",
- "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/LaravelCollective/html/zipball/64ddfdcaeeb8d332bd98bef442bef81e39c3910b",
- "reference": "64ddfdcaeeb8d332bd98bef442bef81e39c3910b",
- "shasum": ""
- },
- "require": {
- "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/routing": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/session": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/view": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "php": ">=7.2.5"
- },
- "require-dev": {
- "illuminate/database": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "mockery/mockery": "~1.0",
- "phpunit/phpunit": "~8.5|^9.5.10"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "6.x-dev"
- },
- "laravel": {
- "providers": [
- "Collective\\Html\\HtmlServiceProvider"
- ],
- "aliases": {
- "Form": "Collective\\Html\\FormFacade",
- "Html": "Collective\\Html\\HtmlFacade"
- }
- }
- },
- "autoload": {
- "files": [
- "src/helpers.php"
- ],
- "psr-4": {
- "Collective\\Html\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Adam Engebretson",
- "email": "adam@laravelcollective.com"
- },
- {
- "name": "Taylor Otwell",
- "email": "taylorotwell@gmail.com"
- }
- ],
- "description": "HTML and Form Builders for the Laravel Framework",
- "homepage": "https://laravelcollective.com",
- "support": {
- "issues": "https://github.com/LaravelCollective/html/issues",
- "source": "https://github.com/LaravelCollective/html"
- },
- "abandoned": "spatie/laravel-html",
- "time": "2023-04-25T02:46:11+00:00"
- },
{
"name": "lcobucci/clock",
"version": "3.1.0",
@@ -5720,6 +5651,84 @@
],
"time": "2023-05-25T10:19:32+00:00"
},
+ {
+ "name": "spatie/laravel-html",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-html.git",
+ "reference": "bf7bdb55cc5ce15c4ec8134aa1df709c0397c397"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-html/zipball/bf7bdb55cc5ce15c4ec8134aa1df709c0397c397",
+ "reference": "bf7bdb55cc5ce15c4ec8134aa1df709c0397c397",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/http": "^9.0|^8.0|^10.0",
+ "illuminate/support": "^9.0|^8.0|^10.0",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.3",
+ "orchestra/testbench": "^7.0|^6.23|^8.0",
+ "pestphp/pest": "^1.22"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Spatie\\Html\\HtmlServiceProvider"
+ ],
+ "aliases": {
+ "Html": "Spatie\\Html\\Facades\\Html"
+ }
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Spatie\\Html\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian De Deyne",
+ "email": "sebastian@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ },
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "A fluent html builder",
+ "homepage": "https://github.com/spatie/laravel-html",
+ "keywords": [
+ "html",
+ "spatie"
+ ],
+ "support": {
+ "source": "https://github.com/spatie/laravel-html/tree/3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "custom"
+ }
+ ],
+ "time": "2023-01-24T23:47:16+00:00"
+ },
{
"name": "spatie/laravel-ignition",
"version": "2.1.3",
@@ -10440,16 +10449,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.1.3",
+ "version": "10.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "2379ebafc1737e71cdc84f402acb6b7f04198b9d"
+ "reference": "3aad97fde1f3e490e2b316ba56bc4680310e3c3f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2379ebafc1737e71cdc84f402acb6b7f04198b9d",
- "reference": "2379ebafc1737e71cdc84f402acb6b7f04198b9d",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3aad97fde1f3e490e2b316ba56bc4680310e3c3f",
+ "reference": "3aad97fde1f3e490e2b316ba56bc4680310e3c3f",
"shasum": ""
},
"require": {
@@ -10489,7 +10498,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1-dev"
+ "dev-main": "10.2-dev"
}
},
"autoload": {
@@ -10521,7 +10530,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.1.3"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.2.0"
},
"funding": [
{
@@ -10537,7 +10546,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-11T05:16:22+00:00"
+ "time": "2023-06-02T05:42:13+00:00"
},
{
"name": "sebastian/cli-parser",
diff --git a/config/app.php b/config/app.php
index b6f332b8c0..a7c44efb4e 100644
--- a/config/app.php
+++ b/config/app.php
@@ -140,8 +140,7 @@ return [
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
- 'Form' => Collective\Html\FormFacade::class,
- 'Html' => Collective\Html\HtmlFacade::class,
+ 'Html' => Spatie\Html\Facades\Html::class,
'Preferences' => Preferences::class,
'FireflyConfig' => FireflyConfig::class,
'Navigation' => Navigation::class,
diff --git a/config/firefly.php b/config/firefly.php
index 1758714bf9..eb011dc6f0 100644
--- a/config/firefly.php
+++ b/config/firefly.php
@@ -118,7 +118,6 @@ return [
// tokens and keys
'fixer_api_key' => env('FIXER_API_KEY', ''),
- 'mapbox_api_key' => env('MAPBOX_API_KEY', ''),
'ipinfo_token' => env('IPINFO_TOKEN', ''),
'static_cron_token' => envNonEmpty('STATIC_CRON_TOKEN'),
diff --git a/config/twigbridge.php b/config/twigbridge.php
index d70ce0c3a4..70ecf8d088 100644
--- a/config/twigbridge.php
+++ b/config/twigbridge.php
@@ -171,7 +171,7 @@ return [
'Steam',
'Config',
'Request',
- 'Form' => ['is_safe' => ['input', 'select', 'checkbox', 'model', 'open', 'radio', 'textarea', 'file']],
+ 'Html',
'ExpandedForm' => [
'is_safe' => [
'date',
diff --git a/public/v1/js/ff/accounts/show.js b/public/v1/js/ff/accounts/show.js
index 9059b31398..4653e71104 100644
--- a/public/v1/js/ff/accounts/show.js
+++ b/public/v1/js/ff/accounts/show.js
@@ -67,30 +67,6 @@ $(function () {
);
}
- if (doPlaceMarker === true) {
- /*
- Create new map:
- */
-
- // make map:
- var mymap = L.map('location_map', {
- zoomControl: false,
- touchZoom: false,
- doubleClickZoom: false,
- scrollWheelZoom: false,
- boxZoom: false,
- dragging: false
- }).setView([latitude, longitude], zoomLevel);
-
- L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?access_token={accessToken}', {
- attribution: '© OpenStreetMap contributors',
- maxZoom: 18,
- id: 'mapbox/streets-v11',
- accessToken: mapboxToken
- }).addTo(mymap);
- L.marker([latitude, longitude]).addTo(mymap);
- }
-
});
function sortStop(event, ui) {
diff --git a/public/v1/js/ff/tags/create-edit.js b/public/v1/js/ff/tags/create-edit.js
index 986ce5e4f9..58696fda75 100644
--- a/public/v1/js/ff/tags/create-edit.js
+++ b/public/v1/js/ff/tags/create-edit.js
@@ -1,23 +1,22 @@
- /*
- * create-edit.js
- * 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