<ul>
<li>1. <span data-l10n="Universe"></span></li>
<li>2. <span data-l10n="Set or tire"></span></li>
+ </ul>
+ <ul class="set">
<li>3. <span data-l10n="Front width"></span></li>
- <li>4. <span data-l10n="Ratio"></span></li>
- <li>5. <span data-l10n="Diameter"></span></li>
- <li>6. <span data-l10n="Range"></span></li>
+ <li>4. <span data-l10n="Front ratio"></span></li>
+ <li>5. <span data-l10n="Front diameter"></span></li>
+ <li>6. <span data-l10n="Rear width"></span></li>
+ <li>7. <span data-l10n="Rear ratio"></span></li>
+ <li>8. <span data-l10n="Rear diameter"></span></li>
+ </ul>
+ <ul class="tyre">
+ <li>3. <span data-l10n="Position"></span></li>
+ <li>4. <span data-l10n="Width"></span></li>
+ <li>5. <span data-l10n="Ratio"></span></li>
+ <li>6. <span data-l10n="Diameter"></span></li>
+ </ul>
+ <ul>
<li><span data-l10n="Results"></span></li>
</ul>
</header>
<div data-l10n="No product found"></div>
<main>
- <section></section>
+ <form>
+
+ </form>
</main>
<script src="../../jquery.js"></script>
<script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
<script src="jquery.multi-select.js"></script>
+<script src="data-en.js"></script>
<script src="locales.js"></script>
<script src="l10n.js"></script>
<script src="script.js"></script>
+var FORMDATA = {};
+var products = [];
+var p = {front: [], rear: [], frontrear: []};
+var universes = {};
+
+$(function () {
+ $.each(DATA, function (k, v) {
+ var product = v;
+ products.push(product);
+
+ if (universes[v.Univers] === undefined) {
+ universes[v.Univers] = v.Univers;
+ }
+ if (v.Position === 'Front') {
+ p.front.push(product);
+ } else if (v.Position === 'Rear') {
+ p.rear.push(product);
+ } else if (v.Position === 'Front/Rear') {
+ p.front.push(product);
+ p.rear.push(product);
+ p.frontrear.push(product);
+ } else {
+ return;
+ }
+ });
+
+ $(document).on('change', 'select,input', function () {
+ updateForm();
+ });
+ updateForm();
+
+});
+
+function updateForm() {
+ STEP = 1;
+ FORMDATA = $('form').serializeObject();
+ $('header').find('.tyre,.set').hide();
+ $('form').html('');
+ // Universe
+ createSelect('universe', universes, getTranslation("Select a universe"));
+ if (FORMDATA.universe === undefined) {
+ return;
+ }
+ STEP++;
+ createSelectList('set', {set: getTranslation('Set'), tyre: getTranslation('Tyre')});
+ if (FORMDATA.set === undefined) {
+ return;
+ }
+ STEP++;
+ $('header').find('.' + FORMDATA.set).show();
+ if (FORMDATA.set === 'tyre') {
+ updateTyreForm();
+ } else {
+ updateSetForm();
+ }
+ updateSteps();
+}
+
+function updateTyreForm() {
+ createSelect('position', {
+ front: getTranslation('Front'), rear: getTranslation('Rear'), frontrear: getTranslation('Front/Rear')
+ });
+ if (FORMDATA.position === undefined) {
+ return;
+ }
+ STEP++;
+
+ var prodList = filterProdList(FORMDATA.universe, FORMDATA.position)
+ var widths = getValuesOfProductList(prodList, 'Largeur', true);
+
+ createSelect('width', widths);
+ if (FORMDATA.width === undefined) {
+ return;
+ }
+ STEP++;
+ prodList = filterList(prodList, 'Largeur', FORMDATA.width);
+ var ratios = getValuesOfProductList(prodList, 'Ratio', true);
+ createSelect('ratio', ratios);
+ if (FORMDATA.ratio === undefined) {
+ return;
+ }
+ STEP++;
+ prodList = filterList(prodList, 'Ratio', FORMDATA.ratio);
+ var diameters = getValuesOfProductList(prodList, 'Diamètre', true);
+ createSelect('diameter', diameters);
+ if (FORMDATA.diameter === undefined) {
+ return;
+ }
+ STEP++;
+ prodList = filterList(prodList, 'Diamètre', FORMDATA.diameter);
+ console.log(prodList);
+}
+
+function getValuesOfProductList(list, key, sort) {
+ var array = [];
+ $.each(list, function (k, v) {
+ var value = v[key];
+ if (sort) {
+ value = parseInt(value);
+ }
+ if (array.indexOf(value) === -1) {
+ array.push(value);
+ }
+ });
+
+ if (sort) {
+ array.sort(function (a, b) {
+ return a - b;
+ });
+ }
+
+ var res = {};
+ $.each(array, function (k, v) {
+ res[v.toString()] = v.toString();
+ });
+ return res;
+}
+
+function filterList(list, key, value) {
+ var res = [];
+ $.each(list, function (k, v) {
+ if (v[key] !== value) {
+ return;
+ }
+ res.push(v);
+ });
+ return res;
+}
+
+function filterProdList(universe, position) {
+ var res = [];
+ var baselist = p[position];
+ $.each(baselist, function (k, v) {
+ if (v.Univers !== universe) {
+ return;
+ }
+ res.push(v);
+ });
+ return res;
+}
+
+function updateSetForm() {
+
+}
+
+
+function updateSteps() {
+
+}
+
+function createSelect(name, options, placeholder) {
+ if (placeholder === undefined) {
+ placeholder = getTranslation('Select...');
+ }
+ let value = FORMDATA[name];
+
+
+ var s = $('<select name="' + name + '"><option>' + placeholder + '</option></select>');
+ $.each(options, function (k, v) {
+ s.append('<option value="' + k + '"' + (k == value ? ' selected' : '') + '>' + v + '</option>');
+ });
+ $('form').append(s);
+}
+
+function createSelectList(name, options, value) {
+ return createSelect(name, options, value);
+}
+
+(function ($) {
+ $.fn.serializeObject = function () {
+
+ var self = this, json = {}, push_counters = {}, patterns = {
+ "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
+ "key": /[a-zA-Z0-9_]+|(?=\[\])/g,
+ "push": /^$/,
+ "fixed": /^\d+$/,
+ "named": /^[a-zA-Z0-9_]+$/
+ };
+
+
+ this.build = function (base, key, value) {
+ base[key] = value;
+ return base;
+ };
+
+ this.push_counter = function (key) {
+ if (push_counters[key] === undefined) {
+ push_counters[key] = 0;
+ }
+ return push_counters[key]++;
+ };
+
+ $.each($(this).serializeArray(), function () {
+
+ // Skip invalid keys
+ if (!patterns.validate.test(this.name)) {
+ return;
+ }
+
+ var k, keys = this.name.match(patterns.key), merge = this.value, reverse_key = this.name;
+
+ while ((k = keys.pop()) !== undefined) {
+
+ // Adjust reverse_key
+ reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');
+
+ // Push
+ if (k.match(patterns.push)) {
+ merge = self.build([], self.push_counter(reverse_key), merge);
+ }
+
+ // Fixed
+ else if (k.match(patterns.fixed)) {
+ merge = self.build([], k, merge);
+ }
+
+ // Named
+ else if (k.match(patterns.named)) {
+ merge = self.build({}, k, merge);
+ }
+ }
+
+ json = $.extend(true, json, merge);
+ });
+
+ return json;
+ };
+})(jQuery);
\ No newline at end of file