3 Commits

Author SHA1 Message Date
=
64b82e3982 fixes 2026-03-06 14:23:21 +10:00
627f74838c sort working 2026-03-01 16:37:58 +10:00
4b6d65a946 filters working
adding sorting
2026-03-01 16:23:58 +10:00
8 changed files with 170 additions and 152 deletions

View File

@@ -27,10 +27,10 @@ mixin galleryMixin()
mixin filtersMixin() mixin filtersMixin()
details.filters details.filters
summary.filters__summary Filters summary.filters__summary Filters
form.filters__form form(id='filters').filters__form
p p
label(for='type') Type: label(for='type') Type:
select(id ='type') input(type='text' id='type')
p p
label(for='name') Name: label(for='name') Name:
input(type='text' id='name') input(type='text' id='name')
@@ -56,18 +56,18 @@ mixin filtersMixin()
| to | to
input(type='number' id='priceTo') input(type='number' id='priceTo')
input.filter-group__button--apply(type='button' id='applyFiltersButton' value="Apply Filters") input.filter-group__button--apply(type='button' id='applyFiltersButton' value="Apply Filters")
input.filter-group__button--reset(type='button' id='resetFiltersButton' value="Reset Filters") input.filter-group__button--reset(type='button' id='clearFiltersButton' value="Reset Filters")
mixin sortLevel(level) mixin sortLevel(level)
p p
select.sort-level__select(id=`sort_${level}`) select.sort-level__select(id=`sort_${level}`)
| ascending? | ascending?
input(type="checkbox", id=`sort_reverse_${level}`) input(type="checkbox", id=`sort_${level}Desc`)
mixin sortingMixin() mixin sortingMixin()
- const sortLevels = ['1', '2', '3']; - const sortLevels = ['1', '2', '3'];
details.sorting details.sorting
summary.sorting__summary Sort summary.sorting__summary Sort
form.sorting__form form(id='sorting')
each level in sortLevels each level in sortLevels
+sortLevel(level) +sortLevel(level)
input.sort-group__button--apply(type='button' id='applySortButton' value="Apply Sort") input.sort-group__button--apply(type='button' id='applySortButton' value="Apply Sort")

View File

@@ -16,4 +16,4 @@ body
+sortingMixin() +sortingMixin()
+graphMixin() +graphMixin()
table.table table(id='list')

View File

@@ -1,64 +1,68 @@
buildings = [ let ram_sticks = [
{ "type": "DDR3", "name": "DDR3-1600-4GB-A1", "size": "4GB", "maker": "Kingston", "release": "2014-03", "price2026": 18, }, { "type": "DDR3", "name": "DDR3-1600-4GB-A1", "size": 4, "maker": "Kingston", "release": "2014-03", "price": 18, },
{ "type": "DDR3", "name": "DDR3-1600-8GB-A2", "size": "8GB", "maker": "Corsair", "release": "2015-06", "price2026": 26, }, { "type": "DDR3", "name": "DDR3-1600-8GB-A2", "size": 8, "maker": "Corsair", "release": "2015-06", "price": 26, },
{ "type": "DDR3", "name": "DDR3-1866-8GB-A3", "size": "8GB", "maker": "G.Skill", "release": "2016-02", "price2026": 29, }, { "type": "DDR3", "name": "DDR3-1866-8GB-A3", "size": 8, "maker": "G.Skill", "release": "2016-02", "price": 29, },
{ "type": "DDR4", "name": "DDR4-2133-8GB-B1", "size": "8GB", "maker": "Crucial", "release": "2017-01", "price2026": 24, }, { "type": "DDR4", "name": "DDR4-2133-8GB-B1", "size": 8, "maker": "Crucial", "release": "2017-01", "price": 24, },
{ "type": "DDR4", "name": "DDR4-2400-8GB-B2", "size": "8GB", "maker": "Kingston", "release": "2017-09", "price2026": 27, }, { "type": "DDR4", "name": "DDR4-2400-8GB-B2", "size": 8, "maker": "Kingston", "release": "2017-09", "price": 27, },
{ "type": "DDR4", "name": "DDR4-2666-16GB-B3", "size": "16GB", "maker": "Corsair", "release": "2018-04", "price2026": 48, }, { "type": "DDR4", "name": "DDR4-2666-16GB-B3", "size": 16, "maker": "Corsair", "release": "2018-04", "price": 48, },
{ "type": "DDR4", "name": "DDR4-3000-16GB-B4", "size": "16GB", "maker": "G.Skill", "release": "2018-11", "price2026": 52, }, { "type": "DDR4", "name": "DDR4-3000-16GB-B4", "size": 16, "maker": "G.Skill", "release": "2018-11", "price": 52, },
{ "type": "DDR4", "name": "DDR4-3200-16GB-B5", "size": "16GB", "maker": "HyperX", "release": "2019-03", "price2026": 55, }, { "type": "DDR4", "name": "DDR4-3200-16GB-B5", "size": 16, "maker": "HyperX", "release": "2019-03", "price": 55, },
{ "type": "DDR4", "name": "DDR4-3200-32GB-B6", "size": "32GB", "maker": "Crucial", "release": "2019-08", "price2026": 92, }, { "type": "DDR4", "name": "DDR4-3200-32GB-B6", "size": 32, "maker": "Crucial", "release": "2019-08", "price": 92, },
{ "type": "DDR4", "name": "DDR4-3600-32GB-B7", "size": "32GB", "maker": "Corsair", "release": "2020-02", "price2026": 99, }, { "type": "DDR4", "name": "DDR4-3600-32GB-B7", "size": 32, "maker": "Corsair", "release": "2020-02", "price": 99, },
{ "type": "DDR5", "name": "DDR5-4800-16GB-C1", "size": "16GB", "maker": "Kingston", "release": "2021-01", "price2026": 78, }, { "type": "DDR5", "name": "DDR5-4800-16GB-C1", "size": 16, "maker": "Kingston", "release": "2021-01", "price": 78, },
{ "type": "DDR5", "name": "DDR5-5200-16GB-C2", "size": "16GB", "maker": "Corsair", "release": "2021-06", "price2026": 84, }, { "type": "DDR5", "name": "DDR5-5200-16GB-C2", "size": 16, "maker": "Corsair", "release": "2021-06", "price": 84, },
{ "type": "DDR5", "name": "DDR5-5600-32GB-C3", "size": "32GB", "maker": "G.Skill", "release": "2022-02", "price2026": 145, }, { "type": "DDR5", "name": "DDR5-5600-32GB-C3", "size": 32, "maker": "G.Skill", "release": "2022-02", "price": 145, },
{ "type": "DDR5", "name": "DDR5-6000-32GB-C4", "size": "32GB", "maker": "Crucial", "release": "2022-07", "price2026": 158, }, { "type": "DDR5", "name": "DDR5-6000-32GB-C4", "size": 32, "maker": "Crucial", "release": "2022-07", "price": 158, },
{ "type": "DDR5", "name": "DDR5-6400-32GB-C5", "size": "32GB", "maker": "Corsair", "release": "2023-01", "price2026": 172, }, { "type": "DDR5", "name": "DDR5-6400-32GB-C5", "size": 32, "maker": "Corsair", "release": "2023-01", "price": 172, },
{ "type": "DDR5", "name": "DDR5-6600-64GB-C6", "size": "64GB", "maker": "Kingston", "release": "2023-05", "price2026": 310, }, { "type": "DDR5", "name": "DDR5-6600-64GB-C6", "size": 64, "maker": "Kingston", "release": "2023-05", "price": 310, },
{ "type": "DDR5", "name": "DDR5-6800-64GB-C7", "size": "64GB", "maker": "G.Skill", "release": "2023-09", "price2026": 329, }, { "type": "DDR5", "name": "DDR5-6800-64GB-C7", "size": 64, "maker": "G.Skill", "release": "2023-09", "price": 329, },
{ "type": "DDR5", "name": "DDR5-7200-64GB-C8", "size": "64GB", "maker": "Corsair", "release": "2024-02", "price2026": 355, }, { "type": "DDR5", "name": "DDR5-7200-64GB-C8", "size": 64, "maker": "Corsair", "release": "2024-02", "price": 355, },
{ "type": "DDR5", "name": "DDR5-7600-96GB-C9", "size": "96GB", "maker": "Crucial", "release": "2024-06", "price2026": 520, }, { "type": "DDR5", "name": "DDR5-7600-96GB-C9", "size": 96, "maker": "Crucial", "release": "2024-06", "price": 520, },
{ "type": "DDR5", "name": "DDR5-8000-96GB-C10", "size": "96GB", "maker": "Kingston", "release": "2024-10", "price2026": 560, }, { "type": "DDR5", "name": "DDR5-8000-96GB-C10", "size": 96, "maker": "Kingston", "release": "2024-10", "price": 560, },
{ "type": "LPDDR4", "name": "LP4-3200-8GB-D1", "size": "8GB", "maker": "Samsung", "release": "2019-01", "price2026": 34, }, { "type": "LPDDR4", "name": "LP4-3200-8GB-D1", "size": 8, "maker": "Samsung", "release": "2019-01", "price": 34, },
{ "type": "LPDDR4", "name": "LP4-4266-8GB-D2", "size": "8GB", "maker": "Micron", "release": "2019-07", "price2026": 39, }, { "type": "LPDDR4", "name": "LP4-4266-8GB-D2", "size": 8, "maker": "Micron", "release": "2019-07", "price": 39, },
{ "type": "LPDDR5", "name": "LP5-5500-12GB-D3", "size": "12GB", "maker": "Samsung", "release": "2020-03", "price2026": 58, }, { "type": "LPDDR5", "name": "LP5-5500-12GB-D3", "size": 12, "maker": "Samsung", "release": "2020-03", "price": 58, },
{ "type": "LPDDR5", "name": "LP5-6400-16GB-D4", "size": "16GB", "maker": "SKHynix", "release": "2021-01", "price2026": 74, }, { "type": "LPDDR5", "name": "LP5-6400-16GB-D4", "size": 16, "maker": "SKHynix", "release": "2021-01", "price": 74, },
{ "type": "LPDDR5X", "name": "LP5X-7500-24GB-D5", "size": "24GB", "maker": "Micron", "release": "2022-05", "price2026": 118, }, { "type": "LPDDR5X", "name": "LP5X-7500-24GB-D5", "size": 24, "maker": "Micron", "release": "2022-05", "price": 118, },
{ "type": "DDR4", "name": "DDR4-2666-8GB-E1", "size": "8GB", "maker": "Patriot", "release": "2018-05", "price2026": 25, }, { "type": "DDR4", "name": "DDR4-2666-8GB-E1", "size": 8, "maker": "Patriot", "release": "2018-05", "price": 25, },
{ "type": "DDR4", "name": "DDR4-3000-8GB-E2", "size": "8GB", "maker": "ADATA", "release": "2018-09", "price2026": 28, }, { "type": "DDR4", "name": "DDR4-3000-8GB-E2", "size": 8, "maker": "ADATA", "release": "2018-09", "price": 28, },
{ "type": "DDR4", "name": "DDR4-3200-8GB-E3", "size": "8GB", "maker": "TeamGroup", "release": "2019-04", "price2026": 30, }, { "type": "DDR4", "name": "DDR4-3200-8GB-E3", "size": 8, "maker": "TeamGroup", "release": "2019-04", "price": 30, },
{ "type": "DDR4", "name": "DDR4-3600-16GB-E4", "size": "16GB", "maker": "ADATA", "release": "2020-01", "price2026": 53, }, { "type": "DDR4", "name": "DDR4-3600-16GB-E4", "size": 16, "maker": "ADATA", "release": "2020-01", "price": 53, },
{ "type": "DDR4", "name": "DDR4-4000-16GB-E5", "size": "16GB", "maker": "Patriot", "release": "2020-06", "price2026": 61, }, { "type": "DDR4", "name": "DDR4-4000-16GB-E5", "size": 16, "maker": "Patriot", "release": "2020-06", "price": 61, },
{ "type": "DDR5", "name": "DDR5-5200-8GB-F1", "size": "8GB", "maker": "TeamGroup", "release": "2021-03", "price2026": 52, }, { "type": "DDR5", "name": "DDR5-5200-8GB-F1", "size": 8, "maker": "TeamGroup", "release": "2021-03", "price": 52, },
{ "type": "DDR5", "name": "DDR5-5600-16GB-F2", "size": "16GB", "maker": "ADATA", "release": "2021-10", "price2026": 88, }, { "type": "DDR5", "name": "DDR5-5600-16GB-F2", "size": 16, "maker": "ADATA", "release": "2021-10", "price": 88, },
{ "type": "DDR5", "name": "DDR5-6000-16GB-F3", "size": "16GB", "maker": "Patriot", "release": "2022-03", "price2026": 95, }, { "type": "DDR5", "name": "DDR5-6000-16GB-F3", "size": 16, "maker": "Patriot", "release": "2022-03", "price": 95, },
{ "type": "DDR5", "name": "DDR5-6400-32GB-F4", "size": "32GB", "maker": "TeamGroup", "release": "2022-09", "price2026": 168, }, { "type": "DDR5", "name": "DDR5-6400-32GB-F4", "size": 32, "maker": "TeamGroup", "release": "2022-09", "price": 168, },
{ "type": "DDR5", "name": "DDR5-7200-32GB-F5", "size": "32GB", "maker": "ADATA", "release": "2023-04", "price2026": 185, }, { "type": "DDR5", "name": "DDR5-7200-32GB-F5", "size": 32, "maker": "ADATA", "release": "2023-04", "price": 185, },
{ "type": "DDR3", "name": "DDR3-1333-4GB-G1", "size": "4GB", "maker": "Samsung", "release": "2013-02", "price2026": 15, }, { "type": "DDR3", "name": "DDR3-1333-4GB-G1", "size": 4, "maker": "Samsung", "release": "2013-02", "price": 15, },
{ "type": "DDR3", "name": "DDR3-1600-4GB-G2", "size": "4GB", "maker": "Micron", "release": "2014-08", "price2026": 17, }, { "type": "DDR3", "name": "DDR3-1600-4GB-G2", "size": 4, "maker": "Micron", "release": "2014-08", "price": 17, },
{ "type": "DDR3", "name": "DDR3-1866-8GB-G3", "size": "8GB", "maker": "Samsung", "release": "2015-11", "price2026": 28, }, { "type": "DDR3", "name": "DDR3-1866-8GB-G3", "size": 8, "maker": "Samsung", "release": "2015-11", "price": 28, },
{ "type": "DDR5", "name": "DDR5-8400-128GB-H1", "size": "128GB", "maker": "Corsair", "release": "2025-01", "price2026": 890, }, { "type": "DDR5", "name": "DDR5-8400-128GB-H1", "size": 128, "maker": "Corsair", "release": "2025-01", "price": 890, },
{ "type": "DDR5", "name": "DDR5-8800-128GB-H2", "size": "128GB", "maker": "G.Skill", "release": "2025-03", "price2026": 940, }, { "type": "DDR5", "name": "DDR5-8800-128GB-H2", "size": 128, "maker": "G.Skill", "release": "2025-03", "price": 940, },
{ "type": "DDR5", "name": "DDR5-9200-128GB-H3", "size": "128GB", "maker": "Kingston", "release": "2025-06", "price2026": 990, }, { "type": "DDR5", "name": "DDR5-9200-128GB-H3", "size": 128, "maker": "Kingston", "release": "2025-06", "price": 990, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X1", "size": "48GB", "maker": "Corsair", "release": "2024-01", "price2026": 210, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X1", "size": 48, "maker": "Corsair", "release": "2024-01", "price": 210, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X2", "size": "48GB", "maker": "Kingston", "release": "2024-02", "price2026": 215, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X2", "size": 48, "maker": "Kingston", "release": "2024-02", "price": 215, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X3", "size": "48GB", "maker": "G.Skill", "release": "2024-03", "price2026": 218, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X3", "size": 48, "maker": "G.Skill", "release": "2024-03", "price": 218, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X4", "size": "48GB", "maker": "ADATA", "release": "2024-04", "price2026": 222, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X4", "size": 48, "maker": "ADATA", "release": "2024-04", "price": 222, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X5", "size": "48GB", "maker": "Patriot", "release": "2024-05", "price2026": 225, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X5", "size": 48, "maker": "Patriot", "release": "2024-05", "price": 225, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X6", "size": "48GB", "maker": "TeamGroup", "release": "2024-06", "price2026": 228, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X6", "size": 48, "maker": "TeamGroup", "release": "2024-06", "price": 228, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X7", "size": "48GB", "maker": "Crucial", "release": "2024-07", "price2026": 230, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X7", "size": 48, "maker": "Crucial", "release": "2024-07", "price": 230, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X8", "size": "48GB", "maker": "Samsung", "release": "2024-08", "price2026": 235, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X8", "size": 48, "maker": "Samsung", "release": "2024-08", "price": 235, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X9", "size": "48GB", "maker": "Micron", "release": "2024-09", "price2026": 238, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X9", "size": 48, "maker": "Micron", "release": "2024-09", "price": 238, },
{ "type": "DDR5", "name": "DDR5-6000-48GB-X10", "size": "48GB", "maker": "SKHynix", "release": "2024-10", "price2026": 240, }, { "type": "DDR5", "name": "DDR5-6000-48GB-X10", "size": 48, "maker": "SKHynix", "release": "2024-10", "price": 240, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y1", "size": "64GB", "maker": "Corsair", "release": "2021-01", "price2026": 180, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y1", "size": 64, "maker": "Corsair", "release": "2021-01", "price": 180, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y2", "size": "64GB", "maker": "Kingston", "release": "2021-02", "price2026": 182, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y2", "size": 64, "maker": "Kingston", "release": "2021-02", "price": 182, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y3", "size": "64GB", "maker": "G.Skill", "release": "2021-03", "price2026": 185, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y3", "size": 64, "maker": "G.Skill", "release": "2021-03", "price": 185, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y4", "size": "64GB", "maker": "ADATA", "release": "2021-04", "price2026": 188, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y4", "size": 64, "maker": "ADATA", "release": "2021-04", "price": 188, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y5", "size": "64GB", "maker": "Patriot", "release": "2021-05", "price2026": 190, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y5", "size": 64, "maker": "Patriot", "release": "2021-05", "price": 190, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y6", "size": "64GB", "maker": "TeamGroup", "release": "2021-06", "price2026": 192, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y6", "size": 64, "maker": "TeamGroup", "release": "2021-06", "price": 192, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y7", "size": "64GB", "maker": "Crucial", "release": "2021-07", "price2026": 195, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y7", "size": 64, "maker": "Crucial", "release": "2021-07", "price": 195, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y8", "size": "64GB", "maker": "Samsung", "release": "2021-08", "price2026": 198, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y8", "size": 64, "maker": "Samsung", "release": "2021-08", "price": 198, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y9", "size": "64GB", "maker": "Micron", "release": "2021-09", "price2026": 200, }, { "type": "DDR4", "name": "DDR4-3200-64GB-Y9", "size": 64, "maker": "Micron", "release": "2021-09", "price": 200, },
{ "type": "DDR4", "name": "DDR4-3200-64GB-Y10", "size": "64GB", "maker": "SKHynix", "release": "2021-10", "price2026": 205, } { "type": "DDR4", "name": "DDR4-3200-64GB-Y10", "size": 64, "maker": "SKHynix", "release": "2021-10", "price": 205, }
] ]
ram_sticks = ram_sticks.map((x) => ({
...x,
release: Number(x.release.split("-")[0]),
}))

View File

@@ -1,10 +1,10 @@
const correspond = { const correspond = {
"Название": "structure", "type": "type",
"Тип": "category", "name": "name",
"Страна": "country", "maker": "manufacturer",
"Город": "city", "size": ["sizeFrom", "sizeTo"],
"Год": ["yearFrom", "yearTo"], "release": ["releaseDateFrom", "releaseDateTo"],
"Высота": ["heightFrom", "heightTo"] "price": ["priceFrom", "priceTo"]
} }
@@ -41,6 +41,7 @@ const dataFilter = (dataForm) => {
valInput = Number(valInput); valInput = Number(valInput);
} }
} }
// формируем очередной элемент ассоциативного массива // формируем очередной элемент ассоциативного массива
dictFilter[item.id] = valInput; dictFilter[item.id] = valInput;
} }
@@ -74,7 +75,7 @@ const filterTable = (data, idTable, dataForm) => {
if (typeof val == 'number') { if (typeof val == 'number') {
result &&= datafilter[correspond[key][0]] <= Number(val) && datafilter[correspond[key][1]] >= Number(val) result &&= datafilter[correspond[key][0]] <= Number(val) && datafilter[correspond[key][1]] >= Number(val)
} }
// console.log(result, key, )
}); });
return result; return result;

View File

@@ -3,75 +3,109 @@ document.addEventListener("DOMContentLoaded", function () {
}) })
function doInit() { function doInit() {
createTable(buildings, 'list'); createTable(ram_sticks, 'list');
const clearFiltersButton = document.getElementById("clearFiltersButton"); const clearFiltersButton = document.getElementById("clearFiltersButton");
clearFiltersButton.addEventListener("click", (event) => { clearFiltersButton.addEventListener("click", (event) => {
clearFilters(filter); clearFilters(filters);
filterTable(buildings,'list',filter) createTable(ram_sticks, 'list');
resetSort(sort); sortTable('list', sorting)
}) })
const applyFiltersButton = document.getElementById("applyFiltersButton"); const applyFiltersButton = document.getElementById("applyFiltersButton");
applyFiltersButton.addEventListener("click", (event) => { applyFiltersButton.addEventListener("click", (event) => {
filterTable(buildings,'list',filter) filterTable(ram_sticks, 'list', filters)
resetSort(sort); sortTable('list', sorting)
}) })
setSortSelects(buildings[0], sort) setSortSelects(ram_sticks[0], sorting)
let i = 0;
sort.fieldsFirst.addEventListener("change",()=>{ for (const elem of sorting.querySelectorAll(`& select`)) {
changeNextSelect(sort.fieldsFirst,sort.fieldsSecond.id) const counter = i;
elem.addEventListener("change", () => {
updateOptions(counter, sorting)
}) })
i+=1;
}
sort.doSortButton.addEventListener("click", ()=>{if (!sortTable('list',sort)){ sorting.applySortButton.addEventListener("click", () => {
clearTable('list'); clearTable('list');
createTable(buildings, 'list'); filterTable(ram_sticks, 'list', filters)
}}); sortTable('list', sorting)
sort.resetSortButton.addEventListener("click", ()=>{resetSort(sort); });
sorting.resetSortButton.addEventListener("click", () => {
resetSort(sorting);
clearTable('list'); clearTable('list');
createTable(buildings, 'list'); filterTable(ram_sticks, 'list', filters)
}); });
} }
// формирование полей элемента списка с заданным текстом и значением
const createOption = (str, val) => { const createOption = (str, val) => {
let item = document.createElement('option'); let item = document.createElement('option');
item.text = str; item.text = str;
item.value = val; item.value = val;
return item; return item;
} }
const resetSortSelect = (sortSelect) => {
// формирование поля со списком sortSelect.querySelectorAll(`& option`).forEach((elem) => {
// параметры массив со значениями элементов списка и элемент select elem.parentElement.removeChild(elem)
})
}
const all_fields = Object.keys(ram_sticks[0]);
const setSortSelect = (arr, sortSelect) => { const setSortSelect = (arr, sortSelect) => {
// создаем OPTION Нет и добавляем ее в SELECT // создаем OPTION Нет и добавляем ее в SELECT
sortSelect.append(createOption('Нет', 0)); sortSelect.append(createOption('none', 0));
// перебираем массив со значениями опций // перебираем массив со значениями опций
arr.forEach((item, index) => { arr.forEach((item, index) => {
// создаем OPTION из очередного ключа и добавляем в SELECT sortSelect.append(createOption(item, all_fields.indexOf(item) + 1));
// значение атрибута VALUE увеличиваем на 1, так как значение 0 имеет опция Нет
sortSelect.append(createOption(item, index + 1));
}); });
} }
const updateOptions = (current_index, sort_form) => {
const elem_collection = sort_form.querySelectorAll(`& select`);
let used_options_list = []
let i = 0;
for (let elem_ of elem_collection) {
if (i++ < current_index) {
used_options_list.push(all_fields[elem_.value-1])
}
}
if (current_index >= elem_collection.length) {
return;
}
const elem = elem_collection[current_index]
const available_options = all_fields.filter((x) => !used_options_list.includes(x));
elem.disabled = available_options.length == 0;
if(current_index>0){
elem.disabled |= elem_collection[current_index-1].value==0;
}
if(elem.disabled){
elem.value = 0;
}
save_val = 0;
if (!used_options_list.includes(all_fields[elem.value - 1])) {
save_val = elem.value;
}
resetSortSelect(elem)
setSortSelect(available_options, elem)
elem.value = save_val;
updateOptions(current_index + 1, sort_form)
}
// формируем поля со списком для многоуровневой сортировки // формируем поля со списком для многоуровневой сортировки
const setSortSelects = (data, dataForm) => { const setSortSelects = (data, dataForm) => {
// выделяем ключи словаря в массив
const head = Object.keys(data); const head = Object.keys(data);
// находим все SELECT в форме
const allSelect = dataForm.getElementsByTagName('select'); const allSelect = dataForm.getElementsByTagName('select');
for (const item of dataForm.elements) { for (const item of dataForm.elements) {
// формируем очередной SELECT
setSortSelect(head, item); setSortSelect(head, item);
// САМОСТОЯТЕЛЬНО все SELECT, кроме первого, сделать неизменяемым
} }
let skipped = false let skipped = false
for (const elem of allSelect) { for (const elem of allSelect) {
@@ -83,24 +117,6 @@ const setSortSelects = (data, dataForm) => {
} }
} }
const changeNextSelect = (curSelect, nextSelectId) => {
let nextSelect = document.getElementById(nextSelectId);
nextSelect.disabled = false;
// в следующем SELECT выводим те же option, что и в текущем
nextSelect.innerHTML = curSelect.innerHTML;
// удаляем в следующем SELECT уже выбранную в текущем опцию
// если это не первая опция - отсутствие сортировки
if (curSelect.value != 0) {
nextSelect.remove(curSelect.value);
} else {
nextSelect.disabled = true;
}
}
const resetSort = (form) => { const resetSort = (form) => {
form.querySelectorAll(`& select`).forEach((curSelect, index) => { if (index != 0) { curSelect.disabled = true } curSelect.value = 0 }) form.querySelectorAll(`& select`).forEach((curSelect, index) => { if (index != 0) { curSelect.disabled = true } curSelect.value = 0 })
} }

View File

@@ -32,7 +32,7 @@ const createSortArr = (data) => {
return sortArr; return sortArr;
}; };
const numberColumns = [4, 5] const numberColumns = [2, 4, 5]
const sortTable = (idTable, formData) => { const sortTable = (idTable, formData) => {
@@ -41,7 +41,7 @@ const sortTable = (idTable, formData) => {
// сортировать таблицу не нужно, во всех полях выбрана опция Нет // сортировать таблицу не нужно, во всех полях выбрана опция Нет
if (sortArr.length === 0) { if (sortArr.length === 0) {
clearTable(idTable) // clearTable(idTable)
return false; return false;
} }

View File

@@ -27,7 +27,8 @@ const createHeaderRow = (headers) => {
const tr = document.createElement('tr'); const tr = document.createElement('tr');
headers.forEach(header => { headers.forEach(header => {
const th = document.createElement('th'); const th = document.createElement('th');
th.innerHTML = header;
th.innerHTML = header.slice(0,1).toUpperCase()+header.slice(1);
tr.append(th); tr.append(th);
}); });
const thead = document.createElement('thead') const thead = document.createElement('thead')

View File

@@ -73,14 +73,10 @@ module.exports = {
devServer: { devServer: {
watchFiles: path.join(__dirname, "src"), watchFiles: path.join(__dirname, "src"),
port: 9000, port: 9000,
static: [ static: {
{
directory: path.join(__dirname, "dist"),
},
{
directory: path.join(__dirname, "src", "pages"), directory: path.join(__dirname, "src", "pages"),
publicPath: "/", publicPath: "/",
watch: true,
}, },
],
}, },
}; };