Exemplo n.º 1
0
        public override void PerformLayout()
        {
            base.PerformLayout();
            Action <object, string, string> fileOpenAction = (jsBlob, textContent, dataUrl) =>
            {
                var eventArgs = new FileUploadEventArgs(jsBlob, textContent, dataUrl);
                FileOpened?.Invoke(this, eventArgs);
                Command?.Execute(new ICommandParameter(eventArgs));
            };

            Action <object> changeAction = evt =>
            {
                var input = Verbatim.Expression("evt.target");
                var file  = Verbatim.Expression("$0.files[0]", input);
                FileName = (string)Verbatim.Expression("$0.name", file);
                var    reader       = Verbatim.Expression("new FileReader()");
                Action onLoadAction = () =>
                {
                    var jsBlob = Verbatim.Expression("$0.result", reader);
                    //string fileMimeType = (string)Verbatim.Expression("$0.type", file);
                    string textContent = null;
                    string dataUrl     = null;
                    switch (UploadType)
                    {
                    case FileUploadType.TextFile:
                        switch (FileEncoding)
                        {
                        case FileReaderEncoding.ASCII:
                            textContent = jsBlob as string;
                            break;

                        case FileReaderEncoding.UTF8:
                            textContent = BufferConverter.ArrayBufferToStringUTF8(jsBlob);
                            break;

                        case FileReaderEncoding.UTF16:
                            textContent = BufferConverter.ArrayBufferToStringUTF16(jsBlob);
                            break;
                        }
                        break;

                    case FileUploadType.ImageFile:
                        dataUrl = jsBlob as string;
                        break;
                    }
                    fileOpenAction(jsBlob, textContent, dataUrl);
                };
                Verbatim.Expression("$0.onload = $1", reader, onLoadAction);
                switch (UploadType)
                {
                case FileUploadType.TextFile:
                case FileUploadType.BinaryFile:
                    if (FileEncoding == FileReaderEncoding.ASCII)
                    {
                        Verbatim.Expression("$0.readAsText($1);", reader, file);
                    }
                    else
                    {
                        Verbatim.Expression("$0.readAsArrayBuffer($1);", reader, file);
                    }
                    break;

                case FileUploadType.ImageFile:
                    Verbatim.Expression("$0.readAsDataURL($1);", reader, file);
                    break;
                }
            };

            InternalJQElement.BindEventListener("change", changeAction);
        }