forked from fanruan/fineui
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
8.4 KiB
277 lines
8.4 KiB
/** |
|
* 图片组件 |
|
* Created by GameJian on 2016/1/26. |
|
*/ |
|
BI.UploadImage = BI.inherit(BI.Widget, { |
|
_defaultConfig: function () { |
|
return BI.extend(BI.UploadImage.superclass._defaultConfig.apply(this, arguments), { |
|
baseCls: "bi-upload-image" |
|
}) |
|
}, |
|
|
|
_init: function () { |
|
BI.UploadImage.superclass._init.apply(this, arguments); |
|
var self = this, o = this.options; |
|
this.label = BI.createWidget({ |
|
type: "bi.text_button", |
|
trigger: "dblclick", |
|
cls: "upload-image-text-button-label", |
|
whiteSpace: "normal", |
|
text: BI.i18nText("BI-DoubleClick_To_Upload_Image") |
|
}); |
|
|
|
this.file = BI.createWidget({ |
|
type: "bi.multifile_editor", |
|
accept: "*.jpg;*.png;*.gif;*.bmp;*.jpeg;", |
|
maxSize: 1024 * 1024 * 100, |
|
title: BI.i18nText("BI-Upload_Image") |
|
}); |
|
|
|
this.img = BI.createWidget({ |
|
type: "bi.image_button", |
|
invalid: true, |
|
width: "100%", |
|
height: "100%" |
|
}); |
|
|
|
this.label.on(BI.TextButton.EVENT_CHANGE, function () { |
|
if (self.isValid()) { |
|
self.file.select(); |
|
} |
|
}); |
|
|
|
this.file.on(BI.MultifileEditor.EVENT_CHANGE, function (data) { |
|
this.upload(); |
|
}); |
|
//直接把图片保存到resource目录下面 |
|
this.file.on(BI.MultifileEditor.EVENT_UPLOADED, function () { |
|
var files = this.getValue(); |
|
var file = files[files.length - 1]; |
|
var attachId = file.attach_id, fileName = file.filename; |
|
var imageId = attachId + "_" + fileName; |
|
BI.requestAsync("fr_bi_base", "save_upload_image", { |
|
attach_id: attachId |
|
}, function (res) { |
|
self.img.setValue(imageId); |
|
self.img.setSrc(BI.UploadImage.getImageSrc(imageId)); |
|
self._check(); |
|
self._setSize("auto", "auto"); |
|
self.fireEvent(BI.UploadImage.EVENT_CHANGE, imageId); |
|
}) |
|
}); |
|
|
|
this.uploadWrapper = BI.createWidget({ |
|
type: "bi.absolute", |
|
items: [{ |
|
el: { |
|
type: "bi.icon_button", |
|
cls: "upload-image-icon-button img-upload-font", |
|
width: 24, |
|
height: 24 |
|
}, |
|
top: 0, |
|
right: 0, |
|
bottom: 0, |
|
left: 0 |
|
}, { |
|
el: this.file, |
|
top: 0, |
|
right: 0, |
|
bottom: 0, |
|
left: 0 |
|
}], |
|
width: 24, |
|
height: 24 |
|
}); |
|
|
|
this.del = BI.createWidget({ |
|
type: "bi.bubble_combo", |
|
el: { |
|
type: "bi.icon_button", |
|
cls: "upload-image-icon-button img-shutdown-font", |
|
title: BI.i18nText("BI-Basic_Delete"), |
|
height: 24, |
|
width: 24 |
|
}, |
|
popup: { |
|
type: "bi.bubble_bar_popup_view", |
|
buttons: [{ |
|
value: BI.i18nText(BI.i18nText("BI-Basic_Sure")), |
|
handler: function () { |
|
self.fireEvent(BI.UploadImage.EVENT_DESTROY); |
|
} |
|
}, { |
|
value: BI.i18nText("BI-Basic_Cancel"), |
|
level: "ignore", |
|
handler: function () { |
|
self.del.hideView(); |
|
} |
|
}], |
|
el: { |
|
type: "bi.vertical_adapt", |
|
items: [{ |
|
type: "bi.label", |
|
text: BI.i18nText("BI-Sure_Delete_Current_Component"), |
|
cls: "upload-image-delete-label", |
|
textAlign: "left", |
|
width: 300 |
|
}], |
|
width: 300, |
|
height: 100, |
|
hgap: 20 |
|
}, |
|
maxHeight: 140, |
|
minWidth: 340 |
|
}, |
|
invisible: true, |
|
stopPropagation: true |
|
}); |
|
|
|
this.size = BI.createWidget({ |
|
type: "bi.image_button_size_combo", |
|
cls: "upload-image-icon-button" |
|
}); |
|
|
|
this.size.on(BI.ImageButtonSizeCombo.EVENT_CHANGE, function () { |
|
self._sizeChange(self.size.getValue()); |
|
self.fireEvent(BI.UploadImage.EVENT_CHANGE, arguments) |
|
}); |
|
|
|
this.href = BI.createWidget({ |
|
type: "bi.image_button_href", |
|
cls: "upload-image-icon-button" |
|
}); |
|
|
|
this.href.on(BI.ImageButtonHref.EVENT_CHANGE, function () { |
|
if (BI.isNotEmptyString(self.href.getValue())) { |
|
self.img.setValid(true) |
|
} else { |
|
self.img.setValid(false) |
|
} |
|
self.fireEvent(BI.UploadImage.EVENT_CHANGE, arguments) |
|
}); |
|
|
|
this.img.on(BI.ImageButton.EVENT_CHANGE, function () { |
|
window.open(BI.Func.formatAddress(self.href.getValue())); |
|
}); |
|
|
|
BI.createWidget({ |
|
type: "bi.absolute", |
|
element: this, |
|
items: [{ |
|
el: { |
|
type: "bi.absolute", |
|
scrollable: false, |
|
items: [{ |
|
el: this.img |
|
}] |
|
}, |
|
left: 0, |
|
right: 0, |
|
top: 0, |
|
bottom: 0 |
|
}, { |
|
el: this.label, |
|
left: 10, |
|
right: 10, |
|
top: 10, |
|
bottom: 10 |
|
}, { |
|
el: this.del, |
|
right: 4, |
|
top: 8 |
|
}, { |
|
el: this.href, |
|
right: 36, |
|
top: 8 |
|
}, { |
|
el: this.size, |
|
right: 68, |
|
top: 8 |
|
}, { |
|
el: this.uploadWrapper, |
|
right: 100, |
|
top: 8 |
|
}] |
|
}); |
|
|
|
this.setToolbarVisible(false); |
|
this.img.invisible(); |
|
}, |
|
|
|
_check: function () { |
|
var f = BI.isNotEmptyString(this.img.getValue()); |
|
this.label.setVisible(!f); |
|
this.img.visible(f); |
|
}, |
|
|
|
_setSize: function (w, h) { |
|
this.img.setImageWidth(w); |
|
this.img.setImageHeight(h) |
|
}, |
|
|
|
_sizeChange: function (size) { |
|
var self = this, o = this.options; |
|
switch (size) { |
|
case BICst.IMAGE_RESIZE_MODE.ORIGINAL: |
|
self._setSize("auto", "auto"); |
|
break; |
|
case BICst.IMAGE_RESIZE_MODE.EQUAL: |
|
self._setSize("auto", "auto"); |
|
var width = this.img.getImageWidth(), height = this.img.getImageHeight(); |
|
var W = this.element.width(), H = this.element.height(); |
|
if (W / H > width / height) { |
|
self._setSize("auto", "100%"); |
|
} else { |
|
self._setSize("100%", "auto"); |
|
} |
|
break; |
|
case BICst.IMAGE_RESIZE_MODE.STRETCH: |
|
self._setSize("100%", "100%"); |
|
break; |
|
default : |
|
self._setSize("auto", "auto"); |
|
} |
|
}, |
|
|
|
setToolbarVisible: function (v) { |
|
this.uploadWrapper.setVisible(v); |
|
this.size.setVisible(v); |
|
this.href.setVisible(v); |
|
this.del.setVisible(v); |
|
}, |
|
|
|
getValue: function () { |
|
return {href: this.href.getValue(), size: this.size.getValue(), src: this.img.getValue()} |
|
}, |
|
|
|
setValue: function (v) { |
|
var self = this; |
|
v || (v = {}); |
|
if (BI.isNotEmptyString(v.href)) { |
|
self.img.setValid(true) |
|
} |
|
this.href.setValue(v.href); |
|
this.size.setValue(v.size); |
|
this.img.setValue(v.src); |
|
if (BI.isNotEmptyString(v.src)) { |
|
this.img.setSrc(BI.UploadImage.getImageSrc(v.src)); |
|
} |
|
this._check(); |
|
this._sizeChange(v.size) |
|
}, |
|
|
|
resize: function () { |
|
this._sizeChange(this.size.getValue()); |
|
} |
|
}); |
|
|
|
BI.extend(BI.UploadImage, { |
|
getImageSrc: function (src) { |
|
return BI.servletURL + "?op=fr_bi&cmd=get_uploaded_image&image_id=" + src; |
|
} |
|
}); |
|
|
|
BI.UploadImage.EVENT_DESTROY = "EVENT_DESTROY"; |
|
BI.UploadImage.EVENT_CHANGE = "EVENT_CHANGE"; |
|
$.shortcut("bi.upload_image", BI.UploadImage); |