Esempio n. 1
0
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"])
Esempio n. 2
0
    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
Esempio n. 3
0
	def createWidget(self):
		self.previewImg = FilePreviewImage()
		self.appendChild(self.previewImg)

		return super().createWidget()
Esempio n. 4
0
	def unserialize(self, value=None):
		self.appendChild(FilePreviewImage(value["dest"] if value else None), replace=True)
Esempio n. 5
0
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()
Esempio n. 6
0
 def unserialize(self, value=None):
     self.replaceChild(FilePreviewImage(value["dest"] if value else None))