mambax7/alumni-26x

View on GitHub
media/jquery/tablesorter-master/js/parsers/parser-file-type.js

Summary

Maintainability
A
1 hr
Test Coverage
/*! Parser: filetype - updated 11/10/2015 (v2.24.4) *//*
 * When a file type extension is found, the equivalent name is
 * prefixed into the parsed data, so sorting occurs in groups
 */
/*global jQuery: false */
;(function($){
    'use strict';

    // basic list from http://en.wikipedia.org/wiki/List_of_file_formats
    // To add a custom equivalent, define:
    // $.tablesorter.fileTypes.equivalents['xx'] = 'A|B|C';
    $.tablesorter.fileTypes = {
        // divides filetype extensions in the equivalent list below
        separator : '|',
        equivalents : {
            '3D Image'     : '3dm|3ds|dwg|max|obj',
            'Audio'        : 'aif|aac|ape|flac|la|m4a|mid|midi|mp2|mp3|ogg|ra|raw|rm|wav|wma',
            'Compressed'   : '7z|bin|cab|cbr|gz|gzip|iso|lha|lz|rar|tar|tgz|zip|zipx|zoo',
            'Database'     : 'csv|dat|db|dbf|json|ldb|mdb|myd|pdb|sql|tsv|wdb|wmdb|xlr|xls|xlsx|xml',
            'Development'  : 'asm|c|class|cls|cpp|cc|cs|cxx|cbp|cs|dba|fla|h|java|lua|pl|py|pyc|pyo|sh|sln|r|rb|vb',
            'Document'     : 'doc|docx|odt|ott|pages|pdf|rtf|tex|wpd|wps|wrd|wri',
            'Executable'   : 'apk|app|com|exe|gadget|lnk|msi',
            'Fonts'        : 'eot|fnt|fon|otf|ttf|woff',
            'Icons'        : 'ani|cur|icns|ico',
            'Images'       : 'bmp|gif|jpg|jpeg|jpe|jp2|pic|png|psd|tga|tif|tiff|wmf|webp',
            'Presentation' : 'pps|ppt',
            'Published'    : 'chp|epub|lit|pub|ppp|fm|mobi',
            'Script'       : 'as|bat|cgi|cmd|jar|js|lua|scpt|scptd|sh|vbs|vb|wsf',
            'Styles'       : 'css|less|sass',
            'Text'         : 'info|log|md|markdown|nfo|tex|text|txt',
            'Vectors'      : 'awg|ai|eps|cdr|ps|svg',
            'Video'        : 'asf|avi|flv|m4v|mkv|mov|mp4|mpe|mpeg|mpg|ogg|rm|rv|swf|vob|wmv',
            'Web'          : 'asp|aspx|cer|cfm|htm|html|php|url|xhtml'
        }
    };

    $.tablesorter.addParser({
        id: 'filetype',
        is: function() {
            return false;
        },
        format: function(s, table) {
            var t,
                c = table.config,
                wo = c.widgetOptions,
                groupSeparator = wo.group_separator || '-',
                i = s.lastIndexOf('.'),
                sep = $.tablesorter.fileTypes.separator,
                m = $.tablesorter.fileTypes.matching,
                types = $.tablesorter.fileTypes.equivalents;
            if (!m) {
                // make a string to 'quick' match the existing equivalents
                t = [];
                $.each(types, function(i, v){
                    t.push(v);
                });
                m = $.tablesorter.fileTypes.matching = sep + t.join(sep) + sep;
            }
            if (i >= 0) {
                t = sep + s.substring(i + 1, s.length) + sep;
                if (m.indexOf(t) >= 0) {
                    for (i in types) {
                        if ((sep + types[i] + sep).indexOf(t) >= 0) {
                            // groupSeparator may use a regular expression!
                            return i + ( groupSeparator.toString().charAt(0) !== '/' ? wo.group_separator : '-' ) + s;
                        }
                    }
                }
            }
            return s;
        },
        type: 'text'
    });

    // sort by file extension
    // converts "this.is.an.image.jpg" into "jpg.this.is.an.image"
    $.tablesorter.addParser({
        id: 'file-extension',
        is: function() {
            return false;
        },
        format: function( str ) {
            var ext,
                parts = str.split( '.' );
            if ( parts.length ) {
                ext = parts.pop();
                parts.unshift( ext );
                return parts.join( '.' );
            }
            return str;
        },
        type: 'text'
    });

})(jQuery);