@@ -803,4 +803,61 @@ export class AngularEditorComponent
803
803
html = html . replace ( 'position: fixed;' , '' ) ;
804
804
return html ;
805
805
}
806
+
807
+ // TODO: Improve event handling
808
+ // TODO: Improve styles
809
+ dragAreaClass = '' ;
810
+ @HostListener ( 'dragover' , [ '$event' ] ) onDragOver ( event : any ) {
811
+ this . dragAreaClass = 'droparea' ;
812
+ event . preventDefault ( ) ;
813
+ }
814
+ @HostListener ( 'dragenter' , [ '$event' ] ) onDragEnter ( event : any ) {
815
+ this . dragAreaClass = 'droparea' ;
816
+ event . preventDefault ( ) ;
817
+ }
818
+ @HostListener ( 'dragend' , [ '$event' ] ) onDragEnd ( event : any ) {
819
+ this . dragAreaClass = '' ;
820
+ event . preventDefault ( ) ;
821
+ }
822
+ @HostListener ( 'dragleave' , [ '$event' ] ) onDragLeave ( event : any ) {
823
+ this . dragAreaClass = '' ;
824
+ event . preventDefault ( ) ;
825
+ }
826
+ @HostListener ( 'drop' , [ '$event' ] ) onDrop ( event : any ) {
827
+ this . dragAreaClass = '' ;
828
+ event . preventDefault ( ) ;
829
+ event . stopPropagation ( ) ;
830
+ if ( event . dataTransfer . files ) {
831
+ let files : FileList = event . dataTransfer . files ;
832
+ this . saveFiles ( files ) ;
833
+ }
834
+ }
835
+
836
+ // TODO: Use error
837
+ error : string ;
838
+
839
+ isValidFile ( file ) : boolean {
840
+ const fileType = file [ 'type' ] ;
841
+ const validImageTypes = [ 'image/gif' , 'image/jpeg' , 'image/png' ] ;
842
+ if ( ! validImageTypes . includes ( fileType ) ) {
843
+ return false ;
844
+ }
845
+ return true ;
846
+ }
847
+
848
+ saveFiles ( files : FileList ) : void {
849
+ if ( files . length > 1 ) {
850
+ this . error = 'Only one file at time allow' ;
851
+ return ;
852
+ }
853
+
854
+ const file = files [ 0 ] ;
855
+ if ( ! this . isValidFile ( file ) ) {
856
+ this . error = `Invalid file type` ;
857
+ return ;
858
+ }
859
+
860
+ this . error = '' ;
861
+ this . editorService . uploadImage ( file ) ;
862
+ }
806
863
}
0 commit comments