class FileEditWidget(RelationalEditWidget): style = ["flr-value", "flr-value--relational","flr-value--file"] def createWidget(self): self.previewImg = FilePreviewImage() self.appendChild(self.previewImg) return super().createWidget() def unserialize(self, value=None): super().unserialize(value) if self.value: self.previewImg.setFile(self.value["dest"])
def createWidget(self): tpl = html5.Template() self.previewImg = FilePreviewImage() self.appendChild(self.previewImg) def FileApiTest(): testDiv = html5.Div() divparamslist = dir(testDiv.element) return (("draggable" in divparamslist or ("ondragstart" in divparamslist and "ondrop" in divparamslist)) and "FormData" in dir(html5.window) and "FileReader" in dir(html5.window)) self.hasFileApi = FileApiTest() # language=html tpl.appendChild( self.fromHTML(""" <div class="flr-bone-widgets"> <div class="flr-widgets-item input-group" [name]='filerow'> <flare-input [name]="destWidget" readonly> <flare-button [name]="selectBtn" class="btn--select input-group-item--last" text="Select" icon="icon-select"></flare-button> <flare-button hidden [name]="deleteBtn" class="btn--delete" text="Delete" icon="icon-delete"></flare-button> </div> <div class="flr-widgets-item"> <div [name]="dropArea" class="supports-upload"> <flare-svg-icon value='icon-upload-file' title='Upload'> </flare-svg-icon> <label for="inplace-upload" class="flr-inplace-upload-label"><strong>Datei auswählen</strong><span [name]="dropText"> oder hierhin ziehen</span>.</label> <input id="inplace-upload" class="flr-inplace-upload" type="file" [name]="files" files selected"/> </div> <p [name]="uploadResult" style="display: none;"></p> </div> </div> """)) self.filerow.hide() if not self.hasFileApi: self.dropText.hide() else: for event in [ "onDragEnter", "onDragOver", "onDragLeave", "onDrop" ]: setattr(self.dropArea, event, getattr(self, event)) self.dropArea.sinkEvent(event) self.sinkEvent("onChange") return tpl
def createWidget(self): self.previewImg = FilePreviewImage() self.appendChild(self.previewImg) return super().createWidget()
def unserialize(self, value=None): self.appendChild(FilePreviewImage(value["dest"] if value else None), replace=True)
class FileEditDirectWidget(RelationalEditWidget): style = ["flr-value", "flr-value--file"] def createWidget(self): tpl = html5.Template() self.previewImg = FilePreviewImage() self.appendChild(self.previewImg) def FileApiTest(): testDiv = html5.Div() divparamslist = dir(testDiv.element) return ('draggable' in divparamslist or ('ondragstart' in divparamslist and 'ondrop' in divparamslist)) and 'FormData' in dir(html5.window) and 'FileReader' in dir(html5.window) self.hasFileApi = FileApiTest() # language=html tpl.appendChild(self.fromHTML( """ <div class="flr-bone-widgets"> <div class="flr-widgets-item input-group" [name]='filerow'> <flare-input [name]="destWidget" readonly> <flare-button [name]="selectBtn" class="btn--select input-group-item--last" text="Select" icon="icon-select"></flare-button> <flare-button hidden [name]="deleteBtn" class="btn--delete" text="Delete" icon="icon-delete"></flare-button> </div> <div class="flr-widgets-item"> <div [name]="dropArea" class="supports-upload"> <flare-svg-icon value='icon-upload-file' title='Upload'> </flare-svg-icon> <label for="inplace-upload" class="flr-inplace-upload-label"><strong>Datei auswählen</strong><span [name]="dropText"> oder hierhin ziehen</span>.</label> <input id="inplace-upload" class="flr-inplace-upload" type="file" [name]="files" files selected"/> </div> <p [name]="uploadResult" style="display: none;"></p> </div> </div> """ )) self.filerow.hide() if not self.hasFileApi: self.dropText.hide() else: for event in ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"]: setattr(self.dropArea, event, getattr(self, event)) self.dropArea.sinkEvent(event) self.sinkEvent("onChange") return tpl def updateWidget(self): if self.bone.readonly: self.destWidget.disable() self.selectBtn.hide() self.deleteBtn.hide() self.dropArea.hide() else: self.destWidget.enable() self.selectBtn.show() self.dropArea.show() # Only allow to delete entry when not multiple and not required! if not self.bone.multiple and not self.bone.required: self.deleteBtn.show() self.selectBtn.removeClass("input-group-item--last") def onChange( self, event ): if event.target.files: file = event.target.files[0] self.startUpload(file) def startUpload( self, file ): uploader = Uploader( file, None, showResultMessage = False ) self.appendChild( uploader ) uploader.uploadSuccess.register( self ) uploader.uploadFailed.register( self ) def onDragEnter(self, event): console.log("onDragEnter", event) event.stopPropagation() event.preventDefault() def onDragOver(self, event): console.log("onDragEnter", event) event.stopPropagation() event.preventDefault() def onDragLeave(self, event): console.log("onDragLeave", event) event.stopPropagation() event.preventDefault() def onDrop(self, event): self.uploadResult["style"]["display"] = "none" event.stopPropagation() event.preventDefault() files = event.dataTransfer.files if files.length: # only pick first file!!! currentFile = files.item( 0 ) self.startUpload(currentFile) def onUploadSuccess(self, uploader, entry): self.destKey = entry["key"] self.value = {"dest": entry, "rel": None} self.previewImg.setFile(entry) self.updateString() self.updateWidget() self.removeChild(uploader) self.uploadResult.hide() self.filerow.show() #self.uploadResult.element.innerHTML = "Upload erfolgreich" #self.uploadResult["style"]["display"] = "block" if not self.bone.multiple: self.dropArea.hide() def onUploadFailed(self, uploader, errorCode): self.removeChild(uploader) self.uploadResult.element.innerHTML = "Upload abgebrochen mit Fehlercode {0}".format(errorCode) self.uploadResult.show() def unserialize(self, value=None): super().unserialize(value) if self.value: self.previewImg.setFile(self.value["dest"]) self.dropArea.hide() self.filerow.show() def onDeleteBtnClick(self): self.unserialize() self.dropArea.show() #show drop Area self.uploadResult.hide() #hide Status self.files["value"]='' # reset input self.previewImg.setFile(None) #reset Preview self.filerow.hide()
def unserialize(self, value=None): self.replaceChild(FilePreviewImage(value["dest"] if value else None))