Subversion-Projekte lars-tiefland.zeldi.de_alt

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

// Accept a value from a file input based on a required mimetype
$.validator.addMethod( "accept", function( value, element, param ) {

        // Split mime on commas in case we have multiple types we can accept
        var typeParam = typeof param === "string" ? param.replace( /\s/g, "" ) : "image/*",
                optionalValue = this.optional( element ),
                i, file, regex;

        // Element is optional
        if ( optionalValue ) {
                return optionalValue;
        }

        if ( $( element ).attr( "type" ) === "file" ) {

                // Escape string to be used in the regex
                // see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
                // Escape also "/*" as "/.*" as a wildcard
                typeParam = typeParam
                                .replace( /[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g, "\\$&" )
                                .replace( /,/g, "|" )
                                .replace( /\/\*/g, "/.*" );

                // Check if the element has a FileList before checking each file
                if ( element.files && element.files.length ) {
                        regex = new RegExp( ".?(" + typeParam + ")$", "i" );
                        for ( i = 0; i < element.files.length; i++ ) {
                                file = element.files[ i ];

                                // Grab the mimetype from the loaded file, verify it matches
                                if ( !file.type.match( regex ) ) {
                                        return false;
                                }
                        }
                }
        }

        // Either return true because we've validated each file, or because the
        // browser does not support element.files and the FileList feature
        return true;
}, $.validator.format( "Please enter a value with a valid mimetype." ) );