MCPcopy
hub / github.com/github/awesome-copilot / initInstructionsPage

Function initInstructionsPage

website/src/scripts/pages/instructions.ts:158–226  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

156}
157
158export async function initInstructionsPage(): Promise<void> {
159 const list = document.getElementById('resource-list');
160 const clearFiltersBtn = document.getElementById('clear-filters');
161 const sortSelect = document.getElementById('sort-select') as HTMLSelectElement | null;
162
163 if (!modalReady) {
164 setupModal();
165 modalReady = true;
166 }
167
168 setupResourceListHandlers(list as HTMLElement | null);
169
170 const data = await fetchData<InstructionsData>('instructions.json');
171 if (!data || !data.items) {
172 if (list) list.innerHTML = '<div class="empty-state"><h3>Failed to load data</h3></div>';
173 return;
174 }
175
176 allItems = data.items;
177 instructionByPath = new Map(allItems.map((item) => [item.path, item]));
178
179 extensionSelectEl = document.getElementById('filter-extension') as HTMLSelectElement | null;
180 if (extensionSelectEl) {
181 extensionSelectEl.innerHTML = '';
182 data.filters.extensions.forEach((ext) => {
183 const option = document.createElement('option');
184 option.value = ext;
185 option.textContent = ext;
186 extensionSelectEl?.appendChild(option);
187 });
188 }
189
190 const initialExtensions = getQueryParamValues('extension').filter((extension) => data.filters.extensions.includes(extension));
191 const initialSort = getQueryParam('sort');
192
193 if (initialExtensions.length > 0) {
194 currentFilters.extensions = initialExtensions;
195 setSelectValues(extensionSelectEl, initialExtensions);
196 }
197 if (initialSort === 'lastUpdated') {
198 currentSort = initialSort;
199 if (sortSelect) sortSelect.value = initialSort;
200 }
201
202 extensionSelectEl?.addEventListener('change', () => {
203 currentFilters.extensions = getSelectValues(extensionSelectEl);
204 applyFiltersAndRender();
205 syncUrlState();
206 });
207
208 sortSelect?.addEventListener('change', () => {
209 currentSort = sortSelect.value as InstructionSortOption;
210 applyFiltersAndRender();
211 syncUrlState();
212 });
213
214 clearFiltersBtn?.addEventListener('click', () => {
215 currentFilters = { extensions: [] };

Callers

nothing calls this directly

Calls 12

setupModalFunction · 0.90
getQueryParamValuesFunction · 0.90
getQueryParamFunction · 0.90
setSelectValuesFunction · 0.90
getSelectValuesFunction · 0.90
clearSelectValuesFunction · 0.90
setupActionHandlersFunction · 0.90
addEventListenerMethod · 0.80
applyFiltersAndRenderFunction · 0.70
syncUrlStateFunction · 0.70

Tested by

no test coverage detected