@@ -21,19 +21,26 @@ import searchBar from "./searchbar";
2121 * @property {()=>void } restoreList restore list to original state
2222 */
2323
24+ /**
25+ * @typedef {Object } SettingsPageOptions
26+ * @property {boolean } [preserveOrder] - If true, items are listed in the order provided instead of alphabetical
27+ */
28+
2429/**
2530 * Creates a settings page
2631 * @param {string } title
2732 * @param {ListItem[] } settings
2833 * @param {(key, value) => void } callback called when setting is changed
2934 * @param {'united'|'separate' } [type='united']
35+ * @param {SettingsPageOptions } [options={}]
3036 * @returns {SettingsPage }
3137 */
3238export default function settingsPage (
3339 title ,
3440 settings ,
3541 callback ,
3642 type = "united" ,
43+ options = { } ,
3744) {
3845 let hideSearchBar = ( ) => { } ;
3946 const $page = Page ( title ) ;
@@ -96,7 +103,7 @@ export default function settingsPage(
96103 actionStack . remove ( title ) ;
97104 } ;
98105
99- listItems ( $list , settings , callback ) ;
106+ listItems ( $list , settings , callback , options ) ;
100107 $page . body = $list ;
101108
102109 /**@type {HTMLElement[] } */
@@ -190,15 +197,18 @@ export default function settingsPage(
190197 * @param {HTMLUListElement } $list
191198 * @param {Array<ListItem> } items
192199 * @param {()=>void } callback called when setting is changed
200+ * @param {SettingsPageOptions } [options={}]
193201 */
194- function listItems ( $list , items , callback ) {
202+ function listItems ( $list , items , callback , options = { } ) {
195203 const $items = [ ] ;
196204
197- // sort settings by text before rendering
198- items . sort ( ( acc , cur ) => {
199- if ( ! acc ?. text || ! cur ?. text ) return 0 ;
200- return acc . text . localeCompare ( cur . text ) ;
201- } ) ;
205+ // sort settings by text before rendering (unless preserveOrder is true)
206+ if ( ! options . preserveOrder ) {
207+ items . sort ( ( acc , cur ) => {
208+ if ( ! acc ?. text || ! cur ?. text ) return 0 ;
209+ return acc . text . localeCompare ( cur . text ) ;
210+ } ) ;
211+ }
202212 items . forEach ( ( item ) => {
203213 const $setting = Ref ( ) ;
204214 const $settingName = Ref ( ) ;
0 commit comments