(function() { function ready(fn) { if (window.jQuery) return fn(); setTimeout(function() { ready(fn); }, 50); } ready(function() { if (typeof window.allMarketDomains === 'undefined') return; // State management const state = { priceType: '', // '', 'fixed', 'inquiry' domainType: '', // '', 'english', 'numeric', 'idn' selectedSuffixes: [], // array of suffixes tempSuffixes: [], // temp checkbox selection before '确定' is clicked searchQuery: '', // prefix search string sortBy: 'time', // 'time', 'length', 'price' sortOrder: 'desc', // 'asc', 'desc' (default desc for time) page: 1, pageSize: 20 }; // Filter and Render handler window.renderDomainList = function() { let list = [...window.allMarketDomains]; // 1. Filter by price type if (state.priceType) { list = list.filter(d => d.price_type === state.priceType); } // 2. Filter by domain type if (state.domainType) { list = list.filter(d => d.domain_type === state.domainType); } // 3. Filter by suffixes if (state.selectedSuffixes && state.selectedSuffixes.length > 0) { list = list.filter(d => state.selectedSuffixes.includes(d.suffix)); } // 4. Filter by prefix search query if (state.searchQuery) { const query = state.searchQuery.toLowerCase(); list = list.filter(d => d.domain.toLowerCase().startsWith(query)); } // 5. Sort list if (state.sortBy === 'time') { list.sort((a, b) => { const diff = parseInt(b.create_date) - parseInt(a.create_date); return state.sortOrder === 'asc' ? -diff : diff; }); } else if (state.sortBy === 'length') { list.sort((a, b) => { const diff = parseInt(a.length) - parseInt(b.length); return state.sortOrder === 'desc' ? -diff : diff; }); } else if (state.sortBy === 'price') { list.sort((a, b) => { const valA = a.price_type === 'inquiry' ? -1 : parseFloat(a.price); const valB = b.price_type === 'inquiry' ? -1 : parseFloat(b.price); const diff = valA - valB; return state.sortOrder === 'desc' ? -diff : diff; }); } // 6. Paginate list const totalCount = list.length; const totalPages = Math.ceil(totalCount / state.pageSize) || 1; if (state.page > totalPages) state.page = totalPages; const startIdx = (state.page - 1) * state.pageSize; const paginatedList = list.slice(startIdx, startIdx + state.pageSize); // Render table body const $tbody = $('#domain-list-tbody'); $tbody.empty(); if (paginatedList.length === 0) { $tbody.append('没有符合筛选条件的域名'); } else { paginatedList.forEach(d => { const isVerified = parseInt(d.verify_status) === 1; const verifyBadge = isVerified ? `` : ``; const priceStyle = d.price_type === 'inquiry' ? 'color: #3b82f6;' : 'color: #ef4444;'; const row = `
${verifyBadge} ${xn.htmlspecialchars(d.domain)}
${d.length} ${xn.htmlspecialchars(d.description || '--')} ${d.price_display} `; $tbody.append(row); }); } // Render pagination const $nav = $('#pagination-nav'); $nav.empty(); if (totalPages > 1) { const $ul = $(''); // Prev button const prevDisabled = state.page === 1 ? 'disabled' : ''; $ul.append(`
  • «
  • `); // Page numbers for (let i = 1; i <= totalPages; i++) { if (totalPages > 8 && Math.abs(state.page - i) > 2 && i !== 1 && i !== totalPages) { if (i === 2 || i === totalPages - 1) { $ul.append('
  • ...
  • '); } continue; } const activeClass = state.page === i ? 'active' : ''; $ul.append(`
  • ${i}
  • `); } // Next button const nextDisabled = state.page === totalPages ? 'disabled' : ''; $ul.append(`
  • »
  • `); $nav.append($ul); } }; // Actions window.setPriceTypeFilter = function(priceType, btn) { state.priceType = priceType; state.page = 1; $('.price-tab-btn').removeClass('active'); $(btn).addClass('active'); window.renderDomainList(); }; window.toggleDomainTypeDropdown = function(e) { if (e) e.stopPropagation(); $('#domain-type-dropdown').slideToggle(150); $('#suffix-dropdown').slideUp(150); }; window.setDomainTypeFilter = function(type, labelText, item, e) { if (e) e.stopPropagation(); state.domainType = type; state.page = 1; $('#domain-type-text').text(labelText); $('.domain-type-option-item').removeClass('active'); $(item).addClass('active'); $('#domain-type-dropdown').slideUp(150); window.renderDomainList(); }; window.toggleSuffixDropdown = function(e) { if (e) e.stopPropagation(); $('#suffix-dropdown').slideToggle(150); $('#domain-type-dropdown').slideUp(150); }; window.updateSuffixSelection = function(checkbox) { const val = checkbox.value; if (checkbox.checked) { if (!state.tempSuffixes.includes(val)) { state.tempSuffixes.push(val); } } else { state.tempSuffixes = state.tempSuffixes.filter(v => v !== val); } }; window.filterSuffixOptions = function(query) { const q = query.toLowerCase(); $('.suffix-option-item').each(function() { const sfx = $(this).find('input').val().toLowerCase(); if (sfx.indexOf(q) !== -1) { $(this).show(); } else { $(this).hide(); } }); }; window.clearSuffixes = function(e) { if (e) e.stopPropagation(); $('.suffix-checkbox').prop('checked', false); state.tempSuffixes = []; state.selectedSuffixes = []; state.page = 1; $('#suffix-text').text('后缀筛选'); $('#suffix-dropdown').slideUp(150); window.renderDomainList(); }; window.applySuffixes = function(e) { if (e) e.stopPropagation(); state.selectedSuffixes = [...state.tempSuffixes]; state.page = 1; if (state.selectedSuffixes.length > 0) { $('#suffix-text').text(state.selectedSuffixes.length + ' 个后缀'); } else { $('#suffix-text').text('后缀筛选'); } $('#suffix-dropdown').slideUp(150); window.renderDomainList(); }; window.performSearch = function() { state.searchQuery = $('#domain-search-input').val().trim(); state.page = 1; window.renderDomainList(); }; window.setPage = function(page) { state.page = page; window.renderDomainList(); const topOffset = $('#theme-feed-tabs').offset().top - 20; if ($(window).scrollTop() > topOffset) { $('html, body').animate({ scrollTop: topOffset }, 100); } }; // Sorting window.sortByTime = function(btn) { state.sortBy = 'time'; state.sortOrder = state.sortOrder === 'desc' ? 'asc' : 'desc'; // Reset other icons $('#sort-length-icon, #sort-price-icon').removeClass('fa-sort-up fa-sort-down').addClass('fa-sort').css('opacity', '0.4'); // Update time icon const icon = $('#sort-time-icon'); icon.removeClass('fa-sort fa-sort-up fa-sort-down'); if (state.sortOrder === 'asc') { icon.addClass('fa-sort-up').css('opacity', '1'); } else { icon.addClass('fa-sort-down').css('opacity', '1'); } window.renderDomainList(); }; window.sortByLength = function(th) { state.sortBy = 'length'; state.sortOrder = state.sortOrder === 'asc' ? 'desc' : 'asc'; // Reset other icons $('#sort-time-icon, #sort-price-icon').removeClass('fa-sort-up fa-sort-down').addClass('fa-sort').css('opacity', '0.4'); // Update length icon const icon = $('#sort-length-icon'); icon.removeClass('fa-sort fa-sort-up fa-sort-down'); if (state.sortOrder === 'asc') { icon.addClass('fa-sort-up').css('opacity', '1'); } else { icon.addClass('fa-sort-down').css('opacity', '1'); } window.renderDomainList(); }; window.sortByPrice = function(th) { state.sortBy = 'price'; state.sortOrder = state.sortOrder === 'asc' ? 'desc' : 'asc'; // Reset other icons $('#sort-time-icon, #sort-length-icon').removeClass('fa-sort-up fa-sort-down').addClass('fa-sort').css('opacity', '0.4'); // Update price icon const icon = $('#sort-price-icon'); icon.removeClass('fa-sort fa-sort-up fa-sort-down'); if (state.sortOrder === 'asc') { icon.addClass('fa-sort-up').css('opacity', '1'); } else { icon.addClass('fa-sort-down').css('opacity', '1'); } window.renderDomainList(); }; // Global click to close dropdowns $(document).on('click', function(e) { if (!$(e.target).closest('#domain-type-trigger, #domain-type-dropdown').length) { $('#domain-type-dropdown').slideUp(150); } if (!$(e.target).closest('#suffix-trigger, #suffix-dropdown').length) { $('#suffix-dropdown').slideUp(150); } }); // Initialize render window.renderDomainList(); // Detail popup trigger window.showDomainDetail = function(id) { var $modal = $('#domain-detail-modal'); if (!$modal.length) { $modal = $('').appendTo('body'); $modal.on('click', function(e) { if (e.target === this) { window.closeDomainModal(); } }); } $('#domain-detail-modal-container').html('
    加载中...
    '); $modal.removeClass('hidden'); $.ajax({ url: xn.url('jishidetail-' + id), type: 'GET', dataType: 'html', success: function(html) { $('#domain-detail-modal-container').html(html); }, error: function() { $('#domain-detail-modal-container').html('
    加载失败,请重试。
    '); } }); }; window.closeDomainModal = function() { $('#domain-detail-modal').addClass('hidden'); }; window.showDomainWhois = function(domain, event) { if (event) { event.stopPropagation(); event.preventDefault(); } window.open('https://whois.aliyun.com/whois/domain/' + domain, '_blank'); }; }); })();