COM-FSM
Template:MindTouch > Controls > TableSortHeading

TableSortHeading

Page last modified 14:15, 31 Oct 2010 by Admin
    Table of contents
    No headers
    /**
     * Table Sort Heading
     * 
     * @param list $columns - list of maps/str to generate headings
     * @param uri $uri - base uri (default: page.uri)
     * @param map $params - query params to preserve
     * @param str $default - default field to sort by
     * @param bool $enabled - allow sorting (default: true)
     */
    var uri = $uri ?? page.uri;
    var params = $params ?? {};
    var columns = $columns ?? [];
    var sortEnabled = $enabled ?? true;
    var sortKey = $key ?? "sortby";
    var sortField = $current ?? __request.args[sortKey] ?? $default ?? "";
    
    // determine the current sorting information
    var sortDesc = string.startswith(sortField, "-");
    if (sortDesc) {
        let sortField = string.substr(sortField, 1);
    }
    
    // generate column widths
    <colgroup>
    foreach (var column in columns) {
        <col class=("col-" .. __count .. " " .. column.class) width=(column.width ?? "") />
    }
    </colgroup>
    
    <thead>
        <tr>
            foreach (var column in columns) {
                var headingClass = column.class;
                // auto-classing
                let headingClass ..= " sortable col-" .. __count;
                let headingClass ..= (sortEnabled ? "" : " ui-state-disabled");
                <th class=(headingClass) title=(column.label)>
                    var sortClass = column.sortclass;
                    if (sortEnabled && column.field) {
    
                        // sortable column
                        var text = column.label;
                        var columnSortField = column.field;
                        var columnSortType = string.startswith(columnSortField, "-") ? "-" : "";
                        if (columnSortType == "-") {
                            let columnSortField = substr(columnSortField, 1);
                        }
    
                        // check if we are sorting by this column
                        if (columnSortField == sortField) {
                            let columnSortType = sortDesc ? "" : "-";
                            let sortClass ..= sortDesc ? " sort-desc" : " sort-asc";
                        }
    
                        // generate the sort heading
                        var columnParams = params .. {(sortKey): (columnSortType .. columnSortField)};
                        <a class=(sortClass) href=(uri & columnParams)>text;</a>
                    } else {
                        if (!column.field) {
                            let sortClass ..= " nosort"; 
                        }
                        <span class=(sortClass)><span>column.label</span></span>;
                    }
                </th>
            }
        </tr>
    </thead>
    
    
    Powered by MindTouch Core