File tree Expand file tree Collapse file tree 3 files changed +48
-2
lines changed
Expand file tree Collapse file tree 3 files changed +48
-2
lines changed Original file line number Diff line number Diff line change @@ -44,6 +44,7 @@ It supports:
4444* ` accept ` default ` * `
4545* ` multiple ` default ` false `
4646* ` selectOnClick ` default ` true `
47+ * ` validateExtensions ` default ` true `
4748* ` dropzone ` default ` true `
4849* ` preview ` default ` true `
4950* ` progress ` default ` true `
Original file line number Diff line number Diff line change @@ -25,6 +25,7 @@ export default Component.extend({
2525 dropzone : true ,
2626 progress : true ,
2727 showProgress : false ,
28+ validateExtension : true ,
2829 hideFileInput : true ,
2930 readAs : 'readAsFile' ,
3031 selectOnClick : true ,
@@ -73,13 +74,39 @@ export default Component.extend({
7374 }
7475 } ,
7576
76- handleFiles : function ( files ) {
77+ _invalidExtension : function ( files ) {
78+ let accept = this . get ( 'accept' ) ;
79+
80+ if ( accept === '*' ) {
81+ return ;
82+ }
83+
84+ let validExtensions = accept . split ( ',' ) ;
85+
86+ let fileExtensions = files . map ( file => `.${ file . filename . split ( '.' ) . slice ( - 1 ) [ 0 ] } ` ) ;
87+
88+ return fileExtensions . some ( extension => validExtensions . indexOf ( extension ) === - 1 ) ;
89+ } ,
90+
91+ _validate : function ( files ) {
7792 if ( typeof ( this . filesAreValid ) === 'function' ) {
7893 if ( ! this . filesAreValid ( files ) ) {
7994 return ;
8095 }
8196 }
8297
98+ if ( ! this . get ( 'validateExtension' ) ) {
99+ return ;
100+ }
101+
102+ return ! this . _invalidExtension ( files ) ;
103+ } ,
104+
105+ handleFiles : function ( files ) {
106+ if ( ! this . _validate ( files ) ) {
107+ return ;
108+ }
109+
83110 if ( this . get ( 'preview' ) ) {
84111 this . updatePreview ( files ) ;
85112 }
Original file line number Diff line number Diff line change @@ -90,4 +90,22 @@ test('it shows file input', function(assert) {
9090 this . render ( ) ;
9191
9292 assert . equal ( component . $ ( 'input:hidden' ) . length , 0 ) ;
93- } ) ;
93+ } ) ;
94+
95+ test ( 'it rejects improper filetypes' , function ( assert ) {
96+ assert . expect ( 2 ) ;
97+
98+ const component = this . subject ( {
99+ accept : '.jpg,.jpeg' ,
100+ multiple : true
101+ } ) ;
102+
103+ const files = [
104+ { filename : 'goodfile.jpg' } ,
105+ { filename : 'good_file.jpeg' } ,
106+ { filename : 'badfile.html' }
107+ ] ;
108+
109+ assert . strictEqual ( component . _invalidExtension ( files ) , true ) ;
110+ assert . strictEqual ( component . _invalidExtension ( files . slice ( 0 , 2 ) ) , false ) ;
111+ } ) ;
You can’t perform that action at this time.
0 commit comments