diff options
| -rw-r--r-- | API.md | 21 | ||||
| -rw-r--r-- | init.lua | 7 | 
2 files changed, 21 insertions, 7 deletions
@@ -57,16 +57,27 @@ data.          * `"abc"`: Alphabetical (default)          * `"nosort"`: Entries appear in no particular order          * `"custom"`: Manually define the order of entries in `sorting_data` +        * `"function"`: Sort by function defined in `sorting_data`      * `sorting_data`: Additional data for special sorting methods. -       If `sorting=="custom"`, this field must contain a table (list form) in which -       the entry IDs are specified in the order they are supposed to appear in the -       entry list. All entries which are missing in this table will appear in no -       particular order below the final specified one. -       This field is not required if `sorting` has any other value +        * If `sorting=="custom"`, this field must contain a table (list form) in which +          the entry IDs are specified in the order they are supposed to appear in the +          entry list. All entries which are missing in this table will appear in no +          particular order below the final specified one. +        * If `sorting=="function"`, this field is a compare function to be used as +          the `comp` parameter of `table.sort`. The parameters given are two entries. +        * This field is not required if `sorting` has any other value      * `build_formspec`: The template function. Takes entry data as its        only parameter (has the data type of the entry data) and must        return a formspec which is inserted in the Entry tab. +Note: For function-based sorting, the entries provided in the compare function have the +following format: + +    { +        name = n, -- entry name +        data = d, -- arbitrary entry data +    } +  #### Using `build_formspec`  For `build_formspec` you can either define your own function which  procedurally generates the entry formspec or you use one of the @@ -286,13 +286,16 @@ function doc.get_sorted_entry_names(cid)  	end  	local comp  	if cat.def.sorting ~= "nosort" then +		-- Sorting by user function +		if cat.def.sorting == "function" then +			comp = cat.def.sorting_data  		-- Alphabetic sorting -		if cat.def.sorting == "abc" or cat.def.sorting == nil then +		elseif cat.def.sorting == "abc" or cat.def.sorting == nil then  			comp = function(e1, e2)  				if reverse_sort_table[e1.name] < reverse_sort_table[e2.name] then return true else return false end  			end -			table.sort(entry_table, comp)  		end +		table.sort(entry_table, comp)  	end  	return entry_table  | 
