preview package

This commit is contained in:
Xuan Sang LE 2018-03-01 13:56:42 +01:00
parent 0590e284a0
commit c073ed04b3
10 changed files with 138 additions and 41691 deletions

View File

@ -45,6 +45,8 @@ self.OS.API =
handler: { } handler: { }
shared: {} # shared libraries shared: {} # shared libraries
#request a user data #request a user data
mid: () ->
return _courrier.getMID()
post: (p, d, c, f) -> post: (p, d, c, f) ->
q = _courrier.getMID() q = _courrier.getMID()
_API.loading q, p _API.loading q, p

View File

@ -151,6 +151,7 @@ class RemoteFileHandler extends self.OS.API.VFS.BaseFileHandler
when "read" when "read"
return _API.handler.scandir @path, f if @info.type is "dir" return _API.handler.scandir @path, f if @info.type is "dir"
#read the file #read the file
return _API.handler.fileblob @path, f if p is "blob"
_API.handler.readfile @path, f, if p then p else "text" _API.handler.readfile @path, f, if p then p else "text"
when "mk" when "mk"
return f { error: "#{@path} is not a directory" } if @info.type is "file" return f { error: "#{@path} is not a directory" } if @info.type is "file"

View File

@ -63,6 +63,7 @@ class GoogleDriveHandler extends this.OS.API.VFS.BaseFileHandler
.then (r) -> .then (r) ->
_API.loaded q, "OK" _API.loaded q, "OK"
return unless r.result return unless r.result
r.result.mime = r.result.mimeType
f(r) f(r)
.catch (err) -> .catch (err) ->
_API.loaded q, "FAIL" _API.loaded q, "FAIL"
@ -84,6 +85,7 @@ class GoogleDriveHandler extends this.OS.API.VFS.BaseFileHandler
_API.loaded q1, "OK" _API.loaded q1, "OK"
return unless r.result.files and r.result.files.length > 0 return unless r.result.files and r.result.files.length > 0
G_CACHE[me.path] = r.result.files[0].id G_CACHE[me.path] = r.result.files[0].id
r.result.files[0].mime = r.result.files[0].mimeType
f { result: r.result.files[0] } f { result: r.result.files[0] }
.catch (err) -> .catch (err) ->
_API.loaded q1, "FAIL" _API.loaded q1, "FAIL"

View File

@ -4,7 +4,7 @@ jsfiles = pdf.js
cssfiles = main.css cssfiles = main.css
copyfiles = pdf.worker.js scheme.html package.json copyfiles = pdf.worker.js scheme.html package.json bg.jpg
PKG_NAME=Preview PKG_NAME=Preview

BIN
src/packages/Preview/bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@ -4,32 +4,112 @@ class Preview extends this.OS.GUI.BaseApplication
main: () -> main: () ->
me = @ me = @
url = "https://os.localhost:9195/test.pdf" @currfile = @args[0].asFileHandler() if @args and @args.length > 0
@view = @find "view" @view = @find "view"
@status = @find "status"
PDFJS.workerSrc = @_api.handler.get + "/#{@path()}/pdf.worker.js" PDFJS.workerSrc = @_api.handler.get + "/#{@path()}/pdf.worker.js"
#PDFJS.workerSrc = "packages/Preview/pdf.worker.js" @open @currfile
#PDFJS.disableWorker = true
console.log PDFJS.workerSrc open: (file) ->
PDFJS.getDocument(url) me = @
.then (pdf) -> return unless file
fn = (p) -> @currfile = file unless @currfile is file
return if p > pdf.numPages file.onready () ->
pdf.getPage(p).then (page) -> file.info.size = (file.info.size / 1024).toFixed(2)
scale = 1.5 me.renderFile file
viewport = page.getViewport scale , (err) ->
div = ($ "<div/>").attr("id", "page-" + (page.pageIndex + 1)) me.error "File not found #{file.path}"
($ me.view).append div
canvas = ($ "<canvas/>")[0] renderFile: (file) ->
div.append canvas mime = file.info.mime
context = canvas.getContext '2d' return unless mime
canvas.height = viewport.height if mime.match /^[^\/]+\/.*pdf.*/g
canvas.width = viewport.width @renderPDF file
renderContext = else if mime.match /image\/.*/g
canvasContext: context @renderImage file
viewport: viewport else
page.render renderContext @notify "Mime type #{file.info.mime} is not support"
fn(p+1)
fn(1)
setStatus: (t) ->
($ @status).html t
renderPDF: (file) ->
me = @
status = "#{file.info.name} (#{file.info.size} Kb)"
($ me.view).empty()
file.read (d) ->
q = me._api.mid()
me._api.loading q, "RENDERING"
PDFJS.getDocument { data: d }
#PDFJS.getDocument(url)
.then (pdf) ->
fn = (p) ->
if p > pdf.numPages
me.setStatus "#{status} - loaded"
return me._api.loaded q, "OK"
pdf.getPage(p).then (page) ->
scale = 1.5
viewport = page.getViewport scale
div = ($ "<div/>").attr("id", "page-" + (page.pageIndex + 1))
($ me.view).append div
canvas = ($ "<canvas/>")[0]
div.append canvas
context = canvas.getContext '2d'
canvas.height = viewport.height
canvas.width = viewport.width
renderContext =
canvasContext: context
viewport: viewport
page.render renderContext
me.setStatus "#{status} - #{p}/#{pdf.numPages} loaded"
fn(p+1)
fn(1)
.catch (err) ->
me.error "Cannot render the PDF file"
me._api.loaded q, "FAIL"
, "blob"
renderImage: (file) ->
me = @
($ @view).attr("class", "image").empty()
file.read (d) ->
blob = new Blob [d], { type: file.mime }
img = new Image()
img.src = URL.createObjectURL blob
canvas = ($ "<canvas/>")[0]
($ me.view).append canvas
#($ me.view).append img
img.onload = () ->
context = canvas.getContext '2d'
canvas.height = img.height
canvas.width = img.width
console.log canvas.width, canvas.height
context.drawImage img, 0, 0
me.setStatus "#{file.info.name} (#{file.info.size} Kb) - #{img.width}x#{img.height}"
, "blob"
menu: () ->
me = @
menu = [{
text: "File",
child: [
{ text: "Open", dataid: "#{@name}-Open", shortcut: "A-O" },
{ text: "Close", dataid: "#{@name}-Close", shortcut: "C-X" },
],
onmenuselect: (e) -> me.actionFile e.item.data.dataid
}]
menu
actionFile: (e) ->
me = @
switch e
when "#{@name}-Open"
@openDialog "FileDiaLog", ( d, f ) ->
me.open "#{d}/#{f}".asFileHandler()
, "Open file", { mimes: me.meta().mimes }
when "#{@name}-Close"
@quit()
this.OS.register "Preview", Preview this.OS.register "Preview", Preview

View File

@ -1,10 +1,30 @@
afx-app-window[data-id = "preview-win"] afx-hbox[data-id="container"] {
afx-app-window[data-id = "preview-win"] afx-vbox[data-id="container"] div[data-id = "view"]
{
display: block; display: block;
overflow:auto; overflow:auto;
background-image: url("bg.jpg");
background-repeat: repeat;
} }
afx-app-window[data-id = "preview-win"] afx-hbox[data-id="container"] canvas{ afx-app-window[data-id = "preview-win"] afx-vbox[data-id="container"] div[data-id = "status"]
{
background-color: #f6F6F6;
border-top: 1px solid #cbcbcb;
color:#414339;
padding-left: 10px;
padding-top: 3px;
}
afx-app-window[data-id = "preview-win"] afx-vbox[data-id="container"] canvas{
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
display: block; display: block;
} }
afx-app-window[data-id = "preview-win"] afx-vbox[data-id="container"] div[data-id = "view"].image
{
display: flex;
align-items: center;
justify-content: center;
}

View File

@ -9,5 +9,5 @@
"version":"0.1a", "version":"0.1a",
"category":"Utils", "category":"Utils",
"iconclass":"fa fa-eye", "iconclass":"fa fa-eye",
"mimes":["[^\/]*/.*pdf"] "mimes":["[^\/]*/.*pdf", "image/.*"]
} }

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,6 @@
<afx-app-window data-id = "preview-win" apptitle="Preview" width="600" height="400"> <afx-app-window data-id = "preview-win" apptitle="Preview" width="600" height="400">
<afx-hbox data-id = "container"> <afx-vbox data-id = "container">
<div data-id="view" ></div> <div data-id="view" ></div>
</afx-hbox> <div data-id = "status" data-height = "20"></div>
</afx-vbox>
</afx-app-window> </afx-app-window>