refactor javascript
This commit is contained in:
parent
345e207328
commit
83cc9ab082
5
.gitignore
vendored
5
.gitignore
vendored
@ -13,3 +13,8 @@
|
|||||||
/phpunit.xml
|
/phpunit.xml
|
||||||
.phpunit.result.cache
|
.phpunit.result.cache
|
||||||
###< phpunit/phpunit ###
|
###< phpunit/phpunit ###
|
||||||
|
|
||||||
|
###> symfony/asset-mapper ###
|
||||||
|
/public/assets/
|
||||||
|
/assets/vendor/
|
||||||
|
###< symfony/asset-mapper ###
|
||||||
|
@ -109,6 +109,9 @@
|
|||||||
<path value="$PROJECT_DIR$/vendor/symfony/twig-bridge" />
|
<path value="$PROJECT_DIR$/vendor/symfony/twig-bridge" />
|
||||||
<path value="$PROJECT_DIR$/vendor/symfony/twig-bundle" />
|
<path value="$PROJECT_DIR$/vendor/symfony/twig-bundle" />
|
||||||
<path value="$PROJECT_DIR$/vendor/symfony/asset" />
|
<path value="$PROJECT_DIR$/vendor/symfony/asset" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/http-client" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/asset-mapper" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/symfony/http-client-contracts" />
|
||||||
</include_path>
|
</include_path>
|
||||||
</component>
|
</component>
|
||||||
<component name="PhpInterpreters">
|
<component name="PhpInterpreters">
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="App\" />
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="App\" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="App\Tests\" />
|
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="App\Tests\" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/var" />
|
<excludeFolder url="file://$MODULE_DIR$/var" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
||||||
@ -102,6 +103,9 @@
|
|||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/twig-bundle" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/twig-bundle" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/twig/twig" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/twig/twig" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/asset" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/asset" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/asset-mapper" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-client" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-client-contracts" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"phpdocumentor/reflection-docblock": "^5.3",
|
"phpdocumentor/reflection-docblock": "^5.3",
|
||||||
"phpstan/phpdoc-parser": "^1.25",
|
"phpstan/phpdoc-parser": "^1.25",
|
||||||
"symfony/asset": "7.0.*",
|
"symfony/asset": "7.0.*",
|
||||||
|
"symfony/asset-mapper": "^7.0",
|
||||||
"symfony/console": "7.0.*",
|
"symfony/console": "7.0.*",
|
||||||
"symfony/dotenv": "7.0.*",
|
"symfony/dotenv": "7.0.*",
|
||||||
"symfony/flex": "^2",
|
"symfony/flex": "^2",
|
||||||
@ -57,7 +58,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"auto-scripts": {
|
"auto-scripts": {
|
||||||
"cache:clear": "symfony-cmd",
|
"cache:clear": "symfony-cmd",
|
||||||
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
"assets:install %PUBLIC_DIR%": "symfony-cmd",
|
||||||
|
"importmap:install": "symfony-cmd"
|
||||||
},
|
},
|
||||||
"post-install-cmd": [
|
"post-install-cmd": [
|
||||||
"@auto-scripts"
|
"@auto-scripts"
|
||||||
|
331
composer.lock
generated
331
composer.lock
generated
@ -4,8 +4,89 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "948a7d7c4f60d2cead1e331bc1f1c5b4",
|
"content-hash": "717ed6c3538dfaff4c72623709f0f132",
|
||||||
"packages": [
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "composer/semver",
|
||||||
|
"version": "3.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/composer/semver.git",
|
||||||
|
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
|
||||||
|
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^5.3.2 || ^7.0 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpstan/phpstan": "^1.4",
|
||||||
|
"symfony/phpunit-bridge": "^4.2 || ^5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "3.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Composer\\Semver\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nils Adermann",
|
||||||
|
"email": "naderman@naderman.de",
|
||||||
|
"homepage": "http://www.naderman.de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jordi Boggiano",
|
||||||
|
"email": "j.boggiano@seld.be",
|
||||||
|
"homepage": "http://seld.be"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Rob Bast",
|
||||||
|
"email": "rob.bast@gmail.com",
|
||||||
|
"homepage": "http://robbast.nl"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Semver library that offers utilities, version constraint parsing and validation.",
|
||||||
|
"keywords": [
|
||||||
|
"semantic",
|
||||||
|
"semver",
|
||||||
|
"validation",
|
||||||
|
"versioning"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"irc": "ircs://irc.libera.chat:6697/composer",
|
||||||
|
"issues": "https://github.com/composer/semver/issues",
|
||||||
|
"source": "https://github.com/composer/semver/tree/3.4.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://packagist.com",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/composer",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-08-31T09:50:34+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/cache",
|
"name": "doctrine/cache",
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
@ -1863,6 +1944,84 @@
|
|||||||
],
|
],
|
||||||
"time": "2023-10-31T17:59:56+00:00"
|
"time": "2023-10-31T17:59:56+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/asset-mapper",
|
||||||
|
"version": "v7.0.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/asset-mapper.git",
|
||||||
|
"reference": "537b9575df2f0a809abe9dd1117bb4ec578f7a21"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/asset-mapper/zipball/537b9575df2f0a809abe9dd1117bb4ec578f7a21",
|
||||||
|
"reference": "537b9575df2f0a809abe9dd1117bb4ec578f7a21",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer/semver": "^3.0",
|
||||||
|
"php": ">=8.2",
|
||||||
|
"symfony/filesystem": "^6.4|^7.0",
|
||||||
|
"symfony/http-client": "^6.4|^7.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"symfony/framework-bundle": "<6.4"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"symfony/asset": "^6.4|^7.0",
|
||||||
|
"symfony/browser-kit": "^6.4|^7.0",
|
||||||
|
"symfony/console": "^6.4|^7.0",
|
||||||
|
"symfony/event-dispatcher-contracts": "^3.0",
|
||||||
|
"symfony/finder": "^6.4|^7.0",
|
||||||
|
"symfony/framework-bundle": "^6.4|^7.0",
|
||||||
|
"symfony/http-foundation": "^6.4|^7.0",
|
||||||
|
"symfony/http-kernel": "^6.4|^7.0",
|
||||||
|
"symfony/web-link": "^6.4|^7.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\AssetMapper\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Maps directories of assets & makes them available in a public directory with versioned filenames.",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/asset-mapper/tree/v7.0.3"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-01-23T19:26:06+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache",
|
"name": "symfony/cache",
|
||||||
"version": "v7.0.2",
|
"version": "v7.0.2",
|
||||||
@ -3173,6 +3332,176 @@
|
|||||||
],
|
],
|
||||||
"time": "2023-12-29T15:37:40+00:00"
|
"time": "2023-12-29T15:37:40+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/http-client",
|
||||||
|
"version": "v7.0.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/http-client.git",
|
||||||
|
"reference": "3d2605c07cd14aec294f72f5bf8147702f7a5ada"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/http-client/zipball/3d2605c07cd14aec294f72f5bf8147702f7a5ada",
|
||||||
|
"reference": "3d2605c07cd14aec294f72f5bf8147702f7a5ada",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.2",
|
||||||
|
"psr/log": "^1|^2|^3",
|
||||||
|
"symfony/http-client-contracts": "^3",
|
||||||
|
"symfony/service-contracts": "^2.5|^3"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"php-http/discovery": "<1.15",
|
||||||
|
"symfony/http-foundation": "<6.4"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"php-http/async-client-implementation": "*",
|
||||||
|
"php-http/client-implementation": "*",
|
||||||
|
"psr/http-client-implementation": "1.0",
|
||||||
|
"symfony/http-client-implementation": "3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"amphp/amp": "^2.5",
|
||||||
|
"amphp/http-client": "^4.2.1",
|
||||||
|
"amphp/http-tunnel": "^1.0",
|
||||||
|
"amphp/socket": "^1.1",
|
||||||
|
"guzzlehttp/promises": "^1.4",
|
||||||
|
"nyholm/psr7": "^1.0",
|
||||||
|
"php-http/httplug": "^1.0|^2.0",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"symfony/dependency-injection": "^6.4|^7.0",
|
||||||
|
"symfony/http-kernel": "^6.4|^7.0",
|
||||||
|
"symfony/messenger": "^6.4|^7.0",
|
||||||
|
"symfony/process": "^6.4|^7.0",
|
||||||
|
"symfony/stopwatch": "^6.4|^7.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\HttpClient\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"http"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/http-client/tree/v7.0.3"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-01-29T15:41:16+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/http-client-contracts",
|
||||||
|
"version": "v3.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/http-client-contracts.git",
|
||||||
|
"reference": "1ee70e699b41909c209a0c930f11034b93578654"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654",
|
||||||
|
"reference": "1ee70e699b41909c209a0c930f11034b93578654",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.1"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "3.4-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/contracts",
|
||||||
|
"url": "https://github.com/symfony/contracts"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Contracts\\HttpClient\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Test/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Generic abstractions related to HTTP clients",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"abstractions",
|
||||||
|
"contracts",
|
||||||
|
"decoupling",
|
||||||
|
"interfaces",
|
||||||
|
"interoperability",
|
||||||
|
"standards"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-07-30T20:28:31+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-foundation",
|
"name": "symfony/http-foundation",
|
||||||
"version": "v7.0.0",
|
"version": "v7.0.0",
|
||||||
|
27
public/js/buttonActions.js
Normal file
27
public/js/buttonActions.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
function setEditButtonOnClick(editButton, printer) {
|
||||||
|
editButton.onclick = function () {
|
||||||
|
document.getElementById('editInputName').value = printer.name;
|
||||||
|
document.getElementById('editInputPrice').value = printer.price;
|
||||||
|
document.getElementById('editInputBuildVolume').value = printer.build_volume;
|
||||||
|
document.getElementById('editInputMaxSpeed').value = printer.max_speed;
|
||||||
|
|
||||||
|
document.getElementById('editModalConfirm').setAttribute('onclick', `editPrinter(${printer.id})`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setButtonAttributes(buttonType, modal) {
|
||||||
|
const button = document.createElement('button');
|
||||||
|
button.setAttribute('data-bs-target', modal);
|
||||||
|
button.setAttribute('data-bs-toggle', 'modal');
|
||||||
|
button.setAttribute('class', `btn ${buttonType}`);
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setViewButtonOnClick(viewButton, printer) {
|
||||||
|
viewButton.onclick = function () {
|
||||||
|
document.getElementById('viewModalName').textContent = `Name: ${printer.name}`;
|
||||||
|
document.getElementById('viewModalPrice').textContent = `Price: ${printer.price.toFixed(2)}$`;
|
||||||
|
document.getElementById('viewModalBuildVolume').textContent = `Build Volume: ${printer.build_volume}`;
|
||||||
|
document.getElementById('viewModalMaxSpeed').textContent = `Max Speed: ${printer.max_speed}mm/s`;
|
||||||
|
}
|
||||||
|
}
|
@ -1,193 +1,3 @@
|
|||||||
function addTableData(tableRow, data, id, printer) {
|
|
||||||
const tableData = document.createElement('td');
|
|
||||||
tableData.id = `printer${printer.id}:${id}`;
|
|
||||||
tableData.textContent = data;
|
|
||||||
|
|
||||||
tableRow.appendChild(tableData);
|
|
||||||
}
|
|
||||||
|
|
||||||
function removePrinterFromTable(printerId) {
|
|
||||||
const tableBody = document.getElementById(`printer${printerId}`);
|
|
||||||
tableBody.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
function deletePrinter(printerId) {
|
|
||||||
fetch(`/printer/${printerId}`, {method: 'DELETE'}).then(response => {
|
|
||||||
if (response.ok) {
|
|
||||||
removePrinterFromTable(printerId);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function addDeleteButton(tableData, printer) {
|
|
||||||
const deleteButton = setButtonAttributes('btn-danger');
|
|
||||||
deleteButton.textContent = 'Delete';
|
|
||||||
|
|
||||||
deleteButton.onclick = function () {
|
|
||||||
document.getElementById('deleteModalText').textContent = `Are you sure that you want to delete ${printer.name}?`;
|
|
||||||
document.getElementById('deleteModalConfirm').setAttribute('onclick', `deletePrinter(${printer.id})`);
|
|
||||||
}
|
|
||||||
|
|
||||||
tableData.appendChild(deleteButton);
|
|
||||||
}
|
|
||||||
|
|
||||||
function setButtonAttributes(buttonType) {
|
|
||||||
const button = document.createElement('button');
|
|
||||||
button.setAttribute('data-bs-target', '#viewModal');
|
|
||||||
button.setAttribute('data-bs-toggle', 'modal');
|
|
||||||
button.setAttribute('class', `btn ${buttonType}`);
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setViewButtonOnClick(viewButton, printer) {
|
|
||||||
viewButton.onclick = function () {
|
|
||||||
document.getElementById('viewModalName').textContent = `Name: ${printer.name}`;
|
|
||||||
document.getElementById('viewModalPrice').textContent = `Price: ${printer.price.toFixed(2)}$`;
|
|
||||||
document.getElementById('viewModalBuildVolume').textContent = `Build Volume: ${printer.build_volume}`;
|
|
||||||
document.getElementById('viewModalMaxSpeed').textContent = `Max Speed: ${printer.max_speed}mm/s`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function addViewButton(tableData, printer) {
|
|
||||||
const viewButton = setButtonAttributes('btn-primary');
|
|
||||||
viewButton.textContent = 'View';
|
|
||||||
viewButton.id = `printer${printer.id}:viewButton`;
|
|
||||||
|
|
||||||
setViewButtonOnClick(viewButton, printer);
|
|
||||||
|
|
||||||
tableData.appendChild(viewButton);
|
|
||||||
}
|
|
||||||
|
|
||||||
function setEditButtonOnClick(editButton, printer) {
|
|
||||||
editButton.onclick = function () {
|
|
||||||
document.getElementById('editInputName').value = printer.name;
|
|
||||||
document.getElementById('editInputPrice').value = printer.price;
|
|
||||||
document.getElementById('editInputBuildVolume').value = printer.build_volume;
|
|
||||||
document.getElementById('editInputMaxSpeed').value = printer.max_speed;
|
|
||||||
|
|
||||||
document.getElementById('editModalConfirm').setAttribute('onclick', `editPrinter(${printer.id})`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getEditModalValues() {
|
|
||||||
const nameInput = document.getElementById('editInputName').value;
|
|
||||||
const priceInput = document.getElementById('editInputPrice').value;
|
|
||||||
const buildVolumeInput = document.getElementById('editInputBuildVolume').value;
|
|
||||||
const maxSpeedInput = document.getElementById('editInputMaxSpeed').value;
|
|
||||||
return {nameInput, priceInput, buildVolumeInput, maxSpeedInput};
|
|
||||||
}
|
|
||||||
|
|
||||||
function editPrinter(printerId) {
|
|
||||||
const {nameInput, priceInput, buildVolumeInput, maxSpeedInput} = getEditModalValues();
|
|
||||||
|
|
||||||
fetch(`/printer/${printerId}`, {method: 'PUT', body: JSON.stringify({
|
|
||||||
name: nameInput,
|
|
||||||
price: Number(priceInput),
|
|
||||||
build_volume: buildVolumeInput,
|
|
||||||
max_speed: Number(maxSpeedInput),
|
|
||||||
})}).then(response => {
|
|
||||||
if (response.ok) {
|
|
||||||
response.json().then(printer => {
|
|
||||||
document.getElementById(`printer${printer.id}:name`).textContent = printer.name;
|
|
||||||
document.getElementById(`printer${printer.id}:price`).textContent = printer.price;
|
|
||||||
document.getElementById(`printer${printer.id}:build_volume`).textContent = printer.build_volume;
|
|
||||||
|
|
||||||
document.getElementById(`printer${printer.id}:max_speed`).textContent = printer.max_speed;
|
|
||||||
|
|
||||||
const editButton = document.getElementById(`printer${printer.id}:editButton`);
|
|
||||||
setEditButtonOnClick(editButton, printer);
|
|
||||||
|
|
||||||
const viewButton = document.getElementById(`printer${printer.id}:viewButton`);
|
|
||||||
setViewButtonOnClick(viewButton, printer);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function addEditButton(tableData, printer) {
|
|
||||||
const editButton = document.createElement('button');
|
|
||||||
editButton.setAttribute('data-bs-target', '#editModal');
|
|
||||||
editButton.setAttribute('data-bs-toggle', 'modal');
|
|
||||||
editButton.setAttribute('class', 'btn btn-primary');
|
|
||||||
editButton.id = `printer${printer.id}:editButton`
|
|
||||||
editButton.textContent = 'Edit';
|
|
||||||
|
|
||||||
setEditButtonOnClick(editButton, printer);
|
|
||||||
|
|
||||||
tableData.appendChild(editButton);
|
|
||||||
}
|
|
||||||
|
|
||||||
function addTableActions(tableRow, printer) {
|
|
||||||
const tableData = document.createElement('td');
|
|
||||||
|
|
||||||
addViewButton(tableData, printer);
|
|
||||||
addEditButton(tableData, printer);
|
|
||||||
addDeleteButton(tableData, printer);
|
|
||||||
|
|
||||||
tableRow.appendChild(tableData);
|
|
||||||
}
|
|
||||||
|
|
||||||
function addPrinterToTable(tableBody, printer) {
|
|
||||||
const tableRow = document.createElement('tr');
|
|
||||||
addTableData(tableRow, printer.name, 'name', printer);
|
|
||||||
addTableData(tableRow, `${printer.price.toFixed(2)}$`, 'price', printer);
|
|
||||||
addTableData(tableRow, printer.build_volume, 'build_volume', printer);
|
|
||||||
addTableData(tableRow, printer.max_speed + 'mm/s', 'max_speed', printer);
|
|
||||||
|
|
||||||
addTableActions(tableRow, printer);
|
|
||||||
|
|
||||||
tableRow.id = `printer${printer.id}`;
|
|
||||||
tableBody.appendChild(tableRow);
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadTable() {
|
|
||||||
fetch('/printer', {method: 'GET'}).then(response => {
|
|
||||||
response.json().then(json => {
|
|
||||||
const tableBody = document.getElementById('table-body');
|
|
||||||
tableBody.innerHTML = null;
|
|
||||||
for (printer of json) {
|
|
||||||
addPrinterToTable(tableBody, printer);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function clearCreateModalValues() {
|
|
||||||
document.getElementById('inputName').value = '';
|
|
||||||
document.getElementById('inputPrice').value = '';
|
|
||||||
document.getElementById('inputBuildVolume').value = '';
|
|
||||||
document.getElementById('inputMaxSpeed').value = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCreateModalValues() {
|
|
||||||
const nameInput = document.getElementById('inputName').value;
|
|
||||||
const priceInput = document.getElementById('inputPrice').value;
|
|
||||||
const buildVolumeInput = document.getElementById('inputBuildVolume').value;
|
|
||||||
const maxSpeedInput = document.getElementById('inputMaxSpeed').value;
|
|
||||||
return {nameInput, priceInput, buildVolumeInput, maxSpeedInput};
|
|
||||||
}
|
|
||||||
|
|
||||||
function createPrinter() {
|
|
||||||
const {nameInput, priceInput, buildVolumeInput, maxSpeedInput} = getCreateModalValues();
|
|
||||||
|
|
||||||
clearCreateModalValues();
|
|
||||||
|
|
||||||
fetch('/printer', {method: 'POST', body: JSON.stringify({
|
|
||||||
name: nameInput,
|
|
||||||
price: Number(priceInput),
|
|
||||||
build_volume: buildVolumeInput,
|
|
||||||
max_speed: Number(maxSpeedInput),
|
|
||||||
})}).then(response => {
|
|
||||||
if (response.ok) {
|
|
||||||
const tableBody = document.getElementById('table-body');
|
|
||||||
response.json().then(printer => {
|
|
||||||
addPrinterToTable(tableBody, printer);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
loadTable();
|
loadTable();
|
||||||
});
|
});
|
22
public/js/modals.js
Normal file
22
public/js/modals.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
function getEditModalValues() {
|
||||||
|
const nameInput = document.getElementById('editInputName').value;
|
||||||
|
const priceInput = document.getElementById('editInputPrice').value;
|
||||||
|
const buildVolumeInput = document.getElementById('editInputBuildVolume').value;
|
||||||
|
const maxSpeedInput = document.getElementById('editInputMaxSpeed').value;
|
||||||
|
return {nameInput, priceInput, buildVolumeInput, maxSpeedInput};
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearCreateModalValues() {
|
||||||
|
document.getElementById('inputName').value = '';
|
||||||
|
document.getElementById('inputPrice').value = '';
|
||||||
|
document.getElementById('inputBuildVolume').value = '';
|
||||||
|
document.getElementById('inputMaxSpeed').value = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCreateModalValues() {
|
||||||
|
const nameInput = document.getElementById('inputName').value;
|
||||||
|
const priceInput = document.getElementById('inputPrice').value;
|
||||||
|
const buildVolumeInput = document.getElementById('inputBuildVolume').value;
|
||||||
|
const maxSpeedInput = document.getElementById('inputMaxSpeed').value;
|
||||||
|
return {nameInput, priceInput, buildVolumeInput, maxSpeedInput};
|
||||||
|
}
|
54
public/js/printerApi.js
Normal file
54
public/js/printerApi.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
function createPrinter() {
|
||||||
|
const {nameInput, priceInput, buildVolumeInput, maxSpeedInput} = getCreateModalValues();
|
||||||
|
|
||||||
|
clearCreateModalValues();
|
||||||
|
|
||||||
|
fetch('/printer', {method: 'POST', body: JSON.stringify({
|
||||||
|
name: nameInput,
|
||||||
|
price: Number(priceInput),
|
||||||
|
build_volume: buildVolumeInput,
|
||||||
|
max_speed: Number(maxSpeedInput),
|
||||||
|
})}).then(response => {
|
||||||
|
if (response.ok) {
|
||||||
|
const tableBody = document.getElementById('table-body');
|
||||||
|
response.json().then(printer => {
|
||||||
|
addPrinterToTable(tableBody, printer);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function editPrinter(printerId) {
|
||||||
|
const {nameInput, priceInput, buildVolumeInput, maxSpeedInput} = getEditModalValues();
|
||||||
|
|
||||||
|
fetch(`/printer/${printerId}`, {method: 'PUT', body: JSON.stringify({
|
||||||
|
name: nameInput,
|
||||||
|
price: Number(priceInput),
|
||||||
|
build_volume: buildVolumeInput,
|
||||||
|
max_speed: Number(maxSpeedInput),
|
||||||
|
})}).then(response => {
|
||||||
|
if (response.ok) {
|
||||||
|
response.json().then(printer => {
|
||||||
|
document.getElementById(`printer${printer.id}:name`).textContent = printer.name;
|
||||||
|
document.getElementById(`printer${printer.id}:price`).textContent = printer.price;
|
||||||
|
document.getElementById(`printer${printer.id}:build_volume`).textContent = printer.build_volume;
|
||||||
|
|
||||||
|
document.getElementById(`printer${printer.id}:max_speed`).textContent = printer.max_speed;
|
||||||
|
|
||||||
|
const editButton = document.getElementById(`printer${printer.id}:editButton`);
|
||||||
|
setEditButtonOnClick(editButton, printer);
|
||||||
|
|
||||||
|
const viewButton = document.getElementById(`printer${printer.id}:viewButton`);
|
||||||
|
setViewButtonOnClick(viewButton, printer);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function deletePrinter(printerId) {
|
||||||
|
fetch(`/printer/${printerId}`, {method: 'DELETE'}).then(response => {
|
||||||
|
if (response.ok) {
|
||||||
|
removePrinterFromTable(printerId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
79
public/js/tableActions.js
Normal file
79
public/js/tableActions.js
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
function loadTable() {
|
||||||
|
fetch('/printer', {method: 'GET'}).then(response => {
|
||||||
|
response.json().then(json => {
|
||||||
|
const tableBody = document.getElementById('table-body');
|
||||||
|
tableBody.innerHTML = null;
|
||||||
|
for (printer of json) {
|
||||||
|
addPrinterToTable(tableBody, printer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function addPrinterToTable(tableBody, printer) {
|
||||||
|
const tableRow = document.createElement('tr');
|
||||||
|
addTableData(tableRow, printer.name, 'name', printer);
|
||||||
|
addTableData(tableRow, `${printer.price.toFixed(2)}$`, 'price', printer);
|
||||||
|
addTableData(tableRow, printer.build_volume, 'build_volume', printer);
|
||||||
|
addTableData(tableRow, printer.max_speed + 'mm/s', 'max_speed', printer);
|
||||||
|
|
||||||
|
addTableActions(tableRow, printer);
|
||||||
|
|
||||||
|
tableRow.id = `printer${printer.id}`;
|
||||||
|
tableBody.appendChild(tableRow);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addTableActions(tableRow, printer) {
|
||||||
|
const tableData = document.createElement('td');
|
||||||
|
|
||||||
|
addViewButton(tableData, printer);
|
||||||
|
addEditButton(tableData, printer);
|
||||||
|
addDeleteButton(tableData, printer);
|
||||||
|
|
||||||
|
tableRow.appendChild(tableData);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addEditButton(tableData, printer) {
|
||||||
|
const editButton = setButtonAttributes('btn-primary', '#editModal');
|
||||||
|
editButton.id = `printer${printer.id}:editButton`
|
||||||
|
editButton.textContent = 'Edit';
|
||||||
|
|
||||||
|
setEditButtonOnClick(editButton, printer);
|
||||||
|
|
||||||
|
tableData.appendChild(editButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addViewButton(tableData, printer) {
|
||||||
|
const viewButton = setButtonAttributes('btn-primary', '#viewModal');
|
||||||
|
viewButton.textContent = 'View';
|
||||||
|
viewButton.id = `printer${printer.id}:viewButton`;
|
||||||
|
|
||||||
|
setViewButtonOnClick(viewButton, printer);
|
||||||
|
|
||||||
|
tableData.appendChild(viewButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addDeleteButton(tableData, printer) {
|
||||||
|
const deleteButton = setButtonAttributes('btn-danger', '#deleteModal');
|
||||||
|
deleteButton.textContent = 'Delete';
|
||||||
|
|
||||||
|
deleteButton.onclick = function () {
|
||||||
|
document.getElementById('deleteModalText').textContent = `Are you sure that you want to delete ${printer.name}?`;
|
||||||
|
document.getElementById('deleteModalConfirm').setAttribute('onclick', `deletePrinter(${printer.id})`);
|
||||||
|
}
|
||||||
|
|
||||||
|
tableData.appendChild(deleteButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addTableData(tableRow, data, id, printer) {
|
||||||
|
const tableData = document.createElement('td');
|
||||||
|
tableData.id = `printer${printer.id}:${id}`;
|
||||||
|
tableData.textContent = data;
|
||||||
|
|
||||||
|
tableRow.appendChild(tableData);
|
||||||
|
}
|
||||||
|
|
||||||
|
function removePrinterFromTable(printerId) {
|
||||||
|
const tableBody = document.getElementById(`printer${printerId}`);
|
||||||
|
tableBody.remove();
|
||||||
|
}
|
15
symfony.lock
15
symfony.lock
@ -40,6 +40,21 @@
|
|||||||
"tests/bootstrap.php"
|
"tests/bootstrap.php"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"symfony/asset-mapper": {
|
||||||
|
"version": "7.0",
|
||||||
|
"recipe": {
|
||||||
|
"repo": "github.com/symfony/recipes",
|
||||||
|
"branch": "main",
|
||||||
|
"version": "6.4",
|
||||||
|
"ref": "7824128ef0da56f09a376539d00a17e23e9b5054"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"assets/app.js",
|
||||||
|
"assets/styles/app.css",
|
||||||
|
"config/packages/asset_mapper.yaml",
|
||||||
|
"importmap.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
"symfony/console": {
|
"symfony/console": {
|
||||||
"version": "7.0",
|
"version": "7.0",
|
||||||
"recipe": {
|
"recipe": {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block javascripts %}
|
{% block javascripts %}
|
||||||
|
{% block importmap %}{{ importmap('app') }}{% endblock %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body data-bs-theme="dark">
|
<body data-bs-theme="dark">
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block javascripts %}
|
{% block javascripts %}
|
||||||
|
<script src="{{ asset('js/modals.js') }}"></script>
|
||||||
|
<script src="{{ asset('js/buttonActions.js') }}"></script>
|
||||||
|
<script src="{{ asset('js/tableActions.js') }}"></script>
|
||||||
|
<script src="{{ asset('js/printerApi.js') }}"></script>
|
||||||
<script src="{{ asset('js/frontend.js') }}"></script>
|
<script src="{{ asset('js/frontend.js') }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user