MediaWiki:EveryCRT-SearchEngine.js: Difference between revisions

No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 186: Line 186:
                 html += '<label>' + filter.label + '</label>';
                 html += '<label>' + filter.label + '</label>';
                 html += '<div class="crt-multiselect" id="filter-' + filterKey + '" data-filter="' + filterKey + '">';
                 html += '<div class="crt-multiselect" id="filter-' + filterKey + '" data-filter="' + filterKey + '">';
                html += '<div class="crt-multiselect-container">';
                 html += '<div class="crt-multiselect-selected"></div>';
                 html += '<div class="crt-multiselect-selected"></div>';
                 html += '<input type="text" class="crt-multiselect-input" placeholder="Search ' + filter.label.toLowerCase() + '...">';
                 html += '<input type="text" class="crt-multiselect-input" placeholder="Search ' + filter.label.toLowerCase() + '...">';
                html += '</div>';
                 html += '<div class="crt-multiselect-dropdown"></div>';
                 html += '<div class="crt-multiselect-dropdown"></div>';
                 html += '</div>';
                 html += '</div>';
Line 325: Line 327:
         container.querySelectorAll('.crt-multiselect').forEach(function(ms) {
         container.querySelectorAll('.crt-multiselect').forEach(function(ms) {
             var input = ms.querySelector('.crt-multiselect-input');
             var input = ms.querySelector('.crt-multiselect-input');
            var dropdown = ms.querySelector('.crt-multiselect-dropdown');
             var filterKey = ms.dataset.filter;
             var filterKey = ms.dataset.filter;


             input.addEventListener('focus', function() {
             input.addEventListener('focus', function() {
                 dropdown.classList.add('visible');
                 ms.classList.add('open');
                 updateMultiselectDropdown(ms, filterKey);
                 updateMultiselectDropdown(ms, filterKey);
             });
             });


             input.addEventListener('input', function() {
             input.addEventListener('input', function() {
                ms.classList.add('open');
                 updateMultiselectDropdown(ms, filterKey, this.value);
                 updateMultiselectDropdown(ms, filterKey, this.value);
             });
             });
Line 339: Line 341:
             document.addEventListener('click', function(e) {
             document.addEventListener('click', function(e) {
                 if (!ms.contains(e.target)) {
                 if (!ms.contains(e.target)) {
                     dropdown.classList.remove('visible');
                     ms.classList.remove('open');
                 }
                 }
             });
             });
Line 476: Line 478:
                 format: 'json'
                 format: 'json'
             }).done(function(data) {
             }).done(function(data) {
                var seen = {};
                 filterOptions[filterKey] = [];
                 filterOptions[filterKey] = [];
                 if (data.query && data.query.results) {
                 if (data.query && data.query.results) {
Line 482: Line 485:
                             result.printouts[smwProperty].forEach(function(val) {
                             result.printouts[smwProperty].forEach(function(val) {
                                 var v = typeof val === 'object' ? (val.fulltext || val.value || '') : String(val);
                                 var v = typeof val === 'object' ? (val.fulltext || val.value || '') : String(val);
                                 if (v) filterOptions[filterKey].push({ value: v, label: v });
                                 if (v && !seen[v]) {
                                    seen[v] = true;
                                    filterOptions[filterKey].push({ value: v, label: v });
                                }
                             });
                             });
                         }
                         }
Line 839: Line 845:


             var arr = Array.from(matchingModels).sort();
             var arr = Array.from(matchingModels).sort();
             totalResults = arr.length;
             var mainConditions = queryData.mainQuery.replace('[[Category:' + cfg.category + ']]', '').trim();
            totalResultsKnown = true;


             var mainConditions = queryData.mainQuery.replace('[[Category:' + cfg.category + ']]', '').trim();
             if (!mainConditions) {
                totalResults = arr.length;
                totalResultsKnown = true;
            } else {
                totalResults = 0;
                totalResultsKnown = false;
            }
             fetchModelDetailsBatched(arr, mainConditions, sortProperty, sortOpt);
             fetchModelDetailsBatched(arr, mainConditions, sortProperty, sortOpt);
         }).catch(function(error) {
         }).catch(function(error) {
MediaWiki Appliance - Powered by TurnKey Linux