-
Available in the following kernels:
-
-
-
-
- | Language |
- Kernel Name |
- Version |
- Package Version |
-
-
-
- `;
-
if (pkg.kernels && pkg.kernels.length > 0) {
pkg.kernels.forEach(kernel => {
- html += `
+ packageSearchRows.push({
+ packageName: pkg.name,
+ packageVersion: kernel.package_version || 'N/A',
+ kernelName: kernel.kernel_name || 'N/A',
+ kernelVersion: kernel.kernel_version || 'N/A',
+ language: kernel.kernel_language || kernel.language || 'N/A'
+ });
+ });
+ } else {
+ // If no kernels, still show the package
+ packageSearchRows.push({
+ packageName: pkg.name,
+ packageVersion: 'N/A',
+ kernelName: 'N/A',
+ kernelVersion: 'N/A',
+ language: 'N/A'
+ });
+ }
+ });
+
+ // Reset sort state
+ packageSearchSortColumn = -1;
+ packageSearchSortDirection = 1;
+
+ // Render the table
+ renderPackageSearchTable();
+ }
+
+ // Render package search results table
+ function renderPackageSearchTable() {
+ const resultsDiv = document.getElementById('packageSearchResults');
+
+ if (packageSearchRows.length === 0) {
+ resultsDiv.innerHTML = 'No results to display
';
+ return;
+ }
+
+ let html = `
+
+ Found ${packageSearchTotalMatches} package(s) matching "${escapeHtml(packageSearchQuery)}" (${packageSearchRows.length} total result(s))
+
+
+
+
- | ${escapeHtml(kernel.language || 'N/A')} |
- ${escapeHtml(kernel.kernel_name || 'N/A')} |
- ${escapeHtml(kernel.kernel_version || 'N/A')} |
- ${escapeHtml(kernel.package_version || 'N/A')} |
+
+ Package Name
+
+ |
+
+ Package Version
+
+ |
+
+ Kernel Name
+
+ |
+
+ Kernel Version
+
+ |
+
+ Language
+
+ |
- `;
- });
+
+
+ `;
+
+ packageSearchRows.forEach((row, index) => {
+ // Create clickable kernel name link if kernel info is available
+ let kernelNameCell;
+ if (row.kernelName !== 'N/A' && row.kernelVersion !== 'N/A' && row.language !== 'N/A') {
+ kernelNameCell = `${escapeHtml(row.kernelName)}`;
} else {
- html += '| No kernel information available |
';
+ kernelNameCell = escapeHtml(row.kernelName);
}
html += `
-
-
-
-
-
+
+ | ${escapeHtml(row.packageName)} |
+ ${escapeHtml(row.packageVersion)} |
+ ${kernelNameCell} |
+ ${escapeHtml(row.kernelVersion)} |
+ ${escapeHtml(row.language)} |
+
`;
});
+ html += `
+
+
+
+ `;
+
resultsDiv.innerHTML = html;
+
+ // Update sort icons
+ for (let i = 0; i < 5; i++) {
+ const icon = document.getElementById(`packageSortIcon${i}`);
+ if (icon) {
+ if (packageSearchSortColumn === i) {
+ if (packageSearchSortDirection === 1) {
+ icon.className = 'bi bi-arrow-down sort-icon active';
+ } else {
+ icon.className = 'bi bi-arrow-up sort-icon active';
+ }
+ } else {
+ icon.className = 'bi bi-arrow-down-up sort-icon';
+ }
+ }
+ }
+
+ // Attach event listeners to kernel links
+ resultsDiv.querySelectorAll('.kernel-link').forEach(link => {
+ link.addEventListener('click', function(e) {
+ e.preventDefault();
+ const language = this.getAttribute('data-language');
+ const kernelName = this.getAttribute('data-kernel-name');
+ const kernelVersion = this.getAttribute('data-kernel-version');
+ navigateToKernel(language, kernelName, kernelVersion);
+ });
+ });
+ }
+
+ // Sort package search table
+ function sortPackageSearchTable(columnIndex) {
+ // Reset all sort icons
+ for (let i = 0; i < 5; i++) {
+ const icon = document.getElementById(`packageSortIcon${i}`);
+ if (icon) {
+ icon.className = 'bi bi-arrow-down-up sort-icon';
+ }
+ }
+
+ // If clicking same column, reverse direction
+ if (packageSearchSortColumn === columnIndex) {
+ packageSearchSortDirection *= -1;
+ } else {
+ packageSearchSortColumn = columnIndex;
+ packageSearchSortDirection = 1;
+ }
+
+ // Update sort icon
+ const icon = document.getElementById(`packageSortIcon${columnIndex}`);
+ if (icon) {
+ if (packageSearchSortDirection === 1) {
+ icon.className = 'bi bi-arrow-down sort-icon active';
+ } else {
+ icon.className = 'bi bi-arrow-up sort-icon active';
+ }
+ }
+
+ // Sort rows
+ packageSearchRows.sort((a, b) => {
+ let aVal, bVal;
+ switch(columnIndex) {
+ case 0: // Package Name
+ aVal = a.packageName || '';
+ bVal = b.packageName || '';
+ break;
+ case 1: // Package Version
+ aVal = a.packageVersion || '';
+ bVal = b.packageVersion || '';
+ break;
+ case 2: // Kernel Name
+ aVal = a.kernelName || '';
+ bVal = b.kernelName || '';
+ break;
+ case 3: // Kernel Version
+ aVal = a.kernelVersion || '';
+ bVal = b.kernelVersion || '';
+ break;
+ case 4: // Language
+ aVal = a.language || '';
+ bVal = b.language || '';
+ break;
+ }
+
+ if (aVal < bVal) return -1 * packageSearchSortDirection;
+ if (aVal > bVal) return 1 * packageSearchSortDirection;
+ return 0;
+ });
+
+ // Re-render the table
+ renderPackageSearchTable();
+ }
+
+ // Function to navigate to kernel view
+ async function navigateToKernel(language, kernelName, version) {
+ // Switch to kernels view
+ showView('kernels');
+
+ // Set the language if needed
+ const languageSelect = document.getElementById('languageSelect');
+ if (languageSelect.value !== language) {
+ languageSelect.value = language;
+ currentLanguage = language;
+ // Load kernels for the new language
+ await loadKernels(language);
+ }
+
+ // Find the kernel item in the list to highlight it
+ const kernelItems = document.querySelectorAll('.kernel-item');
+ let kernelElement = null;
+
+ kernelItems.forEach(item => {
+ const itemKernelName = item.getAttribute('data-kernel-name');
+ const itemVersion = item.getAttribute('data-version');
+
+ if (itemKernelName === kernelName && itemVersion === version) {
+ kernelElement = item;
+ }
+ });
+
+ // Select the kernel (with or without element for highlighting)
+ await selectKernel(language, kernelName, version, kernelElement);
}