/**
* Created by laixiangran on 2016/8/15.
* homepage:http://www.laixiangran.cn.
*/
import { Directive, ElementRef, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';
@Directive({
selector: '[eNgxFileUpload]',
exportAs: 'eNgxFileUpload'
})
export class ENgxFileUploadDirective implements OnInit, OnDestroy {
private el: HTMLElement;
private $el: JQuery;
private defaultOpts: any = {
language: 'zh',
showCaption: false,
resizeImage: true,
allowedPreviewTypes: ['image', 'html', 'video', 'audio', 'flash'],
previewFileIconSettings: {
'doc': '',
'xls': '',
'ppt': '',
'pdf': '',
'zip': '',
'htm': '',
'mov': '',
'mp3': '',
'txt': '',
},
previewFileExtSettings: {
'doc': function (ext) {
return ext.match(/(doc|docx)$/i);
},
'xls': function (ext) {
return ext.match(/(xls|xlsx)$/i);
},
'ppt': function (ext) {
return ext.match(/(ppt|pptx)$/i);
},
'zip': function (ext) {
return ext.match(/(zip|rar|tar|gzip|gz|7z)$/i);
},
'htm': function (ext) {
return ext.match(/(php|js|css|htm|html)$/i);
},
'txt': function (ext) {
return ext.match(/(txt|ini|md)$/i);
},
'mov': function (ext) {
return ext.match(/(avi|mpg|mkv|mov|mp4|3gp|webm|wmv)$/i);
},
'mp3': function (ext) {
return ext.match(/(mp3|wav)$/i);
},
}
};
@Input('eNgxFileUpload') fileInputOpts: any;
@Output()
ready: EventEmitter = new EventEmitter(false);
@Output()
fileuploaded: EventEmitter = new EventEmitter(false);
@Output()
fileuploaderror: EventEmitter = new EventEmitter(false);
@Output()
filebatchuploadcomplete: EventEmitter = new EventEmitter(false);
@Output()
filebatchuploaderror: EventEmitter = new EventEmitter(false);
@Output()
filebatchuploadsuccess: EventEmitter = new EventEmitter(false);
@Output()
changes: EventEmitter = new EventEmitter(false);
@Output()
fileclear: EventEmitter = new EventEmitter(false);
@Output()
filereset: EventEmitter = new EventEmitter(false);
@Output()
filepreupload: EventEmitter = new EventEmitter(false);
constructor(el: ElementRef) {
this.el = el.nativeElement;
this.$el = $(this.el);
}
ngOnInit() {
this.$el['fileinput']($.extend(true, {}, this.defaultOpts, this.fileInputOpts));
this.ready.emit(this);
this.$el.on('fileuploaded', (event: any, data: any, previewId: any, index: any) => {
this.fileuploaded.emit({
event: event,
data: data,
previewId: previewId,
index: index
});
});
this.$el.on('fileuploaderror', (event: any, data: any, msg: any) => {
this.fileuploaderror.emit({
event: event,
data: data,
msg: msg
});
});
this.$el.on('filebatchuploadcomplete', (event: any, data: any, previewId: any, index: any) => {
this.filebatchuploadcomplete.emit({
event: event,
data: data,
previewId: previewId,
index: index
});
});
this.$el.on('filebatchuploaderror', (event: any, data: any, msg: any) => {
this.filebatchuploaderror.emit({
event: event,
data: data,
msg: msg
});
});
this.$el.on('filebatchuploadsuccess', (event: any, data: any, previewId: any, index: any) => {
this.filebatchuploadsuccess.emit({
event: event,
data: data,
previewId: previewId,
index: index
});
});
this.$el.on('change', (event: any) => {
this.changes.emit(event);
});
this.$el.on('fileclear', (event: any) => {
this.fileclear.emit(event);
});
this.$el.on('filereset', (event: any) => {
this.filereset.emit(event);
});
this.$el.on('filepreupload', (event: any, data: any, previewId: any, index: any) => {
this.filepreupload.emit({
event: event,
data: data,
previewId: previewId,
index: index
});
});
}
ngOnDestroy() {
this.destroy();
}
/**
* 禁用
*/
disable() {
this.$el['fileinput']('disable');
}
/**
* 启用
*/
enable() {
this.$el['fileinput']('enable');
}
/**
* 重置
*/
reset() {
this.$el['fileinput']('reset');
}
/**
* 刷新
*/
refresh() {
this.$el['fileinput']('refresh');
}
/**
* 清空
*/
clear() {
this.$el['fileinput']('clear');
}
/**
* 销毁
*/
destroy() {
this.$el['fileinput']('destroy');
}
/**
* 上传
*/
upload() {
this.$el['fileinput']('upload');
}
/**
* 取消上传
*/
cancel() {
this.$el['fileinput']('cancel');
}
}