mirror of
https://github.com/getnamingo/registry.git
synced 2025-07-26 04:18:29 +02:00
399 lines
No EOL
27 KiB
Twig
399 lines
No EOL
27 KiB
Twig
{% extends "layouts/app.twig" %}
|
|
|
|
{% block title %}{{ __('Manage TLD') }} {{ tld.tld }}{% endblock %}
|
|
|
|
{% block content %}
|
|
<link href="/assets/css/sweetalert2.min.css" rel="stylesheet">
|
|
<div class="page-wrapper">
|
|
<!-- Page header -->
|
|
<div class="page-header d-print-none">
|
|
<div class="container-xl">
|
|
<div class="row g-2 align-items-center">
|
|
<div class="col">
|
|
<div class="mb-1">
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item">
|
|
<a href="{{route('home')}}"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" /><polyline points="5 12 3 12 12 3 21 12 19 12" /><path d="M5 12v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-8" /><rect x="10" y="12" width="4" height="4" /></svg></a>
|
|
</li>
|
|
<li class="breadcrumb-item">
|
|
<a href="{{route('listTlds')}}">{{ __('TLD Management') }}</a>
|
|
</li>
|
|
<li class="breadcrumb-item active">
|
|
{{ __('Manage TLD') }}
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<h2 class="page-title">
|
|
{{ __('Manage TLD') }} {{ tld_u }}
|
|
</h2>
|
|
</div>
|
|
<div class="col-auto ms-auto">
|
|
<div class="btn-list">
|
|
<a href="/registry/idnexport/{{ tld.tld }}" target="_blank" class="btn btn-outline-orange d-none d-sm-inline-block">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M11.5 21h-4.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v5m-5 6h7m-3 -3l3 3l-3 3" /></svg>
|
|
{{ __('Export IDN Table') }}
|
|
</a>
|
|
<a href="/registry/idnexport/{{ tld.tld }}" target="_blank" class="btn btn-outline-orange d-sm-none btn-icon" aria-label="{{ __('Export IDN Table') }}" title="{{ __('Export IDN Table') }}">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M14 3v4a1 1 0 0 0 1 1h4" /><path d="M11.5 21h-4.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v5m-5 6h7m-3 -3l3 3l-3 3" /></svg>
|
|
</a>
|
|
{% if secureTld != 1 %}
|
|
<a href="/registry/dnssec" class="btn btn-outline-indigo enable-dnssec-link desktop-only d-none d-sm-inline-block">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12.462 20.87c-.153 .047 -.307 .09 -.462 .13a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 .11 6.37" /><path d="M16 19h6" /><path d="M19 16v6" /></svg>
|
|
{{ __('Enable DNSSEC') }}
|
|
</a>
|
|
<a href="/registry/dnssec" class="btn btn-outline-indigo enable-dnssec-link mobile-only d-sm-none btn-icon" aria-label="{{ __('Enable DNSSEC') }}" title="{{ __('Enable DNSSEC') }}">
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12.462 20.87c-.153 .047 -.307 .09 -.462 .13a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3a12 12 0 0 0 8.5 3a12 12 0 0 1 .11 6.37" /><path d="M16 19h6" /><path d="M19 16v6" /></svg>
|
|
</a>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Page body -->
|
|
<div class="page-body">
|
|
<div class="container-xl">
|
|
<div class="col-12">
|
|
{% include 'partials/flash.twig' %}
|
|
<form action="/registry/tld/{{ tld.tld }}" method="post" autocomplete="off">
|
|
{{ csrf.field | raw }}
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h3 class="card-title">{{ __('General Details') }}</h3>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="datagrid">
|
|
<div class="datagrid-item">
|
|
<div class="datagrid-title">{{ __('TLD Extension') }}</div>
|
|
<div class="datagrid-content">{{ tld_u }}</div>
|
|
</div>
|
|
<div class="datagrid-item">
|
|
<div class="datagrid-title">{{ __('TLD Type') }}</div>
|
|
<div class="datagrid-content">{{ tld_u|length == 3 ? 'ccTLD' : (tld_u|length > 3 ? 'gTLD' : (tld_u|length == 2 ? 'Test TLD' : '')) }}</div>
|
|
</div>
|
|
<div class="datagrid-item">
|
|
<div class="datagrid-title">{{ __('Supported Script') }}</div>
|
|
<div class="datagrid-content">{{ scriptName }}</div>
|
|
</div>
|
|
<div class="datagrid-item">
|
|
<div class="datagrid-title">DNSSEC</div>
|
|
<div class="datagrid-content">
|
|
{% if secureTld == 1 %}
|
|
{% if dnssecData.error is defined %}
|
|
<span class="status status-red" title="{{ dnssecData.error }}">
|
|
{{ __('Issue') }}
|
|
</span>
|
|
{% else %}
|
|
<span class="status status-blue">
|
|
{{ __('Signed') }}
|
|
</span>
|
|
{% endif %}
|
|
{% else %}
|
|
<span class="status status-secondary">
|
|
{{ __('Not signed') }}
|
|
</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{% if dnssecData is defined and dnssecData.keys is defined and dnssecData.keys|length > 0 %}
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h3 class="card-title">{{ __('DNSSEC Details') }}
|
|
<span class="card-subtitle">{{ __('Last Updated') }}: {{ dnssecData.timestamp }}</span>
|
|
</h3>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="table-responsive">
|
|
<table class="table table-vcenter card-table">
|
|
<thead>
|
|
<tr>
|
|
<th>{{ __('DS Record') }}</th>
|
|
<th>{{ __('Status') }}</th>
|
|
<th>{{ __('Published') }}</th>
|
|
<th>{{ __('Next Rollover') }}</th>
|
|
<th>{{ __('Parent') }}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for key in dnssecData.keys %}
|
|
<tr>
|
|
<td>
|
|
{% if key.ds_record != 'N/A' %}
|
|
<p class="user-select-all tracking-wide mb-0">
|
|
<kbd>{{ key.ds_record }}</kbd>
|
|
</p>
|
|
{% else %}
|
|
<span class="text-muted">{{ __('Not Available') }}</span>
|
|
{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if key.status == 'Active' %}
|
|
<span class="badge bg-success text-success-fg">{{ __('Active') }}</span>
|
|
{% elseif key.status == 'Pending Rollover' %}
|
|
<span class="badge bg-warning text-warning-fg">{{ __('Pending Rollover') }}</span>
|
|
{% else %}
|
|
<span class="badge bg-secondary text-secondary-fg">{{ __('Unknown') }}</span>
|
|
{% endif %}
|
|
</td>
|
|
<td>{{ key.published_date }}</td>
|
|
<td>{{ key.next_rollover }}</td>
|
|
<td>
|
|
{% if key.ds_status == 'omnipresent' %}
|
|
<span class="status-indicator status-green" title="DS record submitted and active at parent zone">
|
|
<span class="status-indicator-circle"></span>
|
|
</span>
|
|
{% elseif key.ds_status == 'rumoured' %}
|
|
<span class="status-indicator status-orange status-indicator-animated" title="DS record needs submission to parent zone">
|
|
<span class="status-indicator-circle"></span>
|
|
</span>
|
|
{% else %}
|
|
<span class="status-indicator status-gray" title="DS record status unknown or unavailable">
|
|
<span class="status-indicator-circle"></span>
|
|
</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h3 class="card-title">{{ __('Pricing') }}</h3>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="table-responsive">
|
|
<table class="table table-vcenter card-table">
|
|
<thead>
|
|
<tr>
|
|
<th>{{ __('Command') }}</th>
|
|
<th>{{ __('Setup Fee') }}</th>
|
|
<th>1 {{ __('Year') }} <span class="text-red">*</span></th>
|
|
<th>2 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>3 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>4 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>5 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>6 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>7 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>8 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>9 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
<th>10 {{ __('Years') }} <span class="text-red">*</span></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>{{ __('Create') }}</td>
|
|
<td><input type="number" class="form-control" name="createm0" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m0 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm12" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m12 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm24" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m24 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm36" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m36 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm48" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m48 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm60" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m60 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm72" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m72 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm84" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m84 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm96" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m96 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm108" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m108 }}"></td>
|
|
<td><input type="number" class="form-control" name="createm120" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ createPrices.m120 }}"></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ __('Renew') }}</td>
|
|
<td><input type="number" class="form-control" name="renewm0" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m0 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm12" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m12 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm24" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m24 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm36" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m36 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm48" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m48 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm60" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m60 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm72" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m72 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm84" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m84 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm96" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m96 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm108" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m108 }}"></td>
|
|
<td><input type="number" class="form-control" name="renewm120" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ renewPrices.m120 }}"></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ __('Transfer') }}</td>
|
|
<td><input type="number" class="form-control" name="transferm0" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m0 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm12" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m12 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm24" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m24 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm36" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m36 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm48" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m48 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm60" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m60 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm72" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m72 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm84" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m84 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm96" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m96 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm108" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m108 }}"></td>
|
|
<td><input type="number" class="form-control" name="transferm120" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ transferPrices.m120 }}"></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<small class="form-text text-muted">{{ __('When you type a price for 1 Year above, it will automatically get multiplied for subsequent years.') }}</small>
|
|
</div>
|
|
<div class="mb-3 mt-3">
|
|
<label for="restorePrice" class="form-label required">{{ __('Restore Price') }}</label>
|
|
<input type="number" class="form-control" id="restorePrice" name="restorePrice" placeholder="0.00" required min="0" step="0.01" pattern="^\d+(\.\d{1,2})?$" value="{{ tld_restore.price }}">
|
|
<small class="form-text text-muted">{{ __('Enter the price for restoring the TLD.') }}</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card mb-3">
|
|
<div class="card-header">
|
|
<h5 class="card-title">{{ __('Premium Names') }}</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<label for="premiumNamesFile" class="form-label">{{ __('Upload CSV File') }}</label>
|
|
<input type="file" class="form-control" id="premiumNamesFile" name="premiumNamesFile" accept=".csv">
|
|
<small class="form-text text-muted">
|
|
{{ __('Please upload a CSV file containing premium names. Each row should include a name and its corresponding pricing category, separated by a comma. Note: If one or more names in the file already exist in our system, they will be overwritten with the new information provided in the upload.') }}
|
|
</small>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<h5 class="card-title mb-3">{{ __('Set Premium Name Price Categories') }}</h5>
|
|
<table class="table" id="categoriesTable">
|
|
<thead>
|
|
<tr>
|
|
<th>{{ __('Category Name') }}</th>
|
|
<th>{{ __('Price') }}</th>
|
|
<th>{{ __('Action') }}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for category in premium_categories %}
|
|
<tr>
|
|
<td>
|
|
<input type="text" class="form-control" name="categoryName{{ category.category_id }}" placeholder="Category Name" value="{{ category.category_name }}" readonly>
|
|
</td>
|
|
<td>
|
|
<input type="number" class="form-control" name="categoryPrice{{ category.category_id }}" placeholder="0.00" min="0" value="{{ category.category_price }}">
|
|
</td>
|
|
<td>
|
|
<button type="button" class="btn btn-danger" disabled>-</button>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
<tr>
|
|
<td><input type="text" class="form-control" name="categoryNameNew1" placeholder="New Category 1"></td>
|
|
<td><input type="number" class="form-control" name="categoryPriceNew1" placeholder="0.00" min="0"></td>
|
|
<td><button type="button" class="btn btn-success add-category">+</button></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<small class="form-text text-muted">
|
|
{{ __('Update existing premium categories as needed. Please note: currently, deletion of categories is not available. All updates will modify existing information without removing any categories.') }}
|
|
</small>
|
|
</div>
|
|
<div class="card-footer">
|
|
<div class="row align-items-center">
|
|
<div class="col-auto">
|
|
<button type="submit" class="btn btn-primary">{{ __('Update TLD') }} {{ tld_u }}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
</div>
|
|
</div>
|
|
{% include 'partials/footer.twig' %}
|
|
</div>
|
|
<script src="/assets/js/sweetalert2.min.js" defer></script>
|
|
<script>
|
|
document.querySelectorAll('.enable-dnssec-link').forEach(function (el) {
|
|
el.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
|
|
const link = e.currentTarget.getAttribute('href');
|
|
|
|
Swal.fire({
|
|
title: 'Are you sure?',
|
|
text: 'Please ensure DNSSEC has been properly configured for this TLD prior to proceeding, as outlined in section 2.1.3b. of the manual.',
|
|
icon: 'warning',
|
|
showCancelButton: true,
|
|
confirmButtonText: 'Yes, continue',
|
|
cancelButtonText: 'Cancel',
|
|
confirmButtonColor: '#4263eb',
|
|
cancelButtonColor: '#9ba9be'
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
window.location.href = link;
|
|
}
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const createm12Input = document.querySelector('input[name="createm12"]');
|
|
const renewm12Input = document.querySelector('input[name="renewm12"]');
|
|
const transferm12Input = document.querySelector('input[name="transferm12"]');
|
|
|
|
const updateMultiplication = (input, startColumnIndex, baseInputName) => {
|
|
const inputValue = parseFloat(input.value);
|
|
if (!isNaN(inputValue)) {
|
|
for (let i = startColumnIndex; i <= 10; i++) {
|
|
const columnName = `${baseInputName}${12 * i}`;
|
|
const columnInput = document.querySelector(`input[name="${columnName}"]`);
|
|
if (columnInput) {
|
|
columnInput.value = (inputValue * i).toFixed(2);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
createm12Input.addEventListener('input', () => {
|
|
updateMultiplication(createm12Input, 2, 'createm');
|
|
});
|
|
|
|
renewm12Input.addEventListener('input', () => {
|
|
updateMultiplication(renewm12Input, 2, 'renewm');
|
|
});
|
|
|
|
transferm12Input.addEventListener('input', () => {
|
|
updateMultiplication(transferm12Input, 2, 'transferm');
|
|
});
|
|
|
|
const categoriesTable = document.getElementById('categoriesTable');
|
|
const addCategoryButton = document.querySelector('.add-category');
|
|
|
|
const maxCategories = 5;
|
|
let categoryCount = 1;
|
|
|
|
addCategoryButton.addEventListener('click', function() {
|
|
if (categoryCount < maxCategories) {
|
|
categoryCount++;
|
|
const newRow = document.createElement('tr');
|
|
newRow.innerHTML = `
|
|
<td><input type="text" class="form-control" name="categoryNameNew${categoryCount}" placeholder="New Category ${categoryCount}"></td>
|
|
<td><input type="number" class="form-control" name="categoryPriceNew${categoryCount}" placeholder="0.00" min="0"></td>
|
|
<td><button type="button" class="btn btn-danger remove-category">-</button></td>
|
|
`;
|
|
categoriesTable.querySelector('tbody').appendChild(newRow);
|
|
}
|
|
|
|
if (categoryCount >= maxCategories) {
|
|
addCategoryButton.style.display = 'none'; // Disable adding more categories after reaching the limit
|
|
}
|
|
});
|
|
|
|
categoriesTable.addEventListener('click', function(event) {
|
|
if (event.target.classList.contains('remove-category')) {
|
|
const row = event.target.closest('tr');
|
|
row.remove();
|
|
categoryCount--;
|
|
addCategoryButton.style.display = 'block'; // Enable adding more categories after removing one
|
|
}
|
|
});
|
|
|
|
});
|
|
</script>
|
|
{% endblock %} |