mirror of
https://github.com/lxsang/antos-frontend.git
synced 2024-12-28 10:18:21 +01:00
preview package
This commit is contained in:
parent
0590e284a0
commit
c073ed04b3
@ -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
|
||||||
|
@ -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"
|
||||||
|
@ -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"
|
||||||
|
@ -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
BIN
src/packages/Preview/bg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
@ -4,16 +4,49 @@ 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 = @
|
||||||
|
return unless file
|
||||||
|
@currfile = file unless @currfile is file
|
||||||
|
file.onready () ->
|
||||||
|
file.info.size = (file.info.size / 1024).toFixed(2)
|
||||||
|
me.renderFile file
|
||||||
|
, (err) ->
|
||||||
|
me.error "File not found #{file.path}"
|
||||||
|
|
||||||
|
renderFile: (file) ->
|
||||||
|
mime = file.info.mime
|
||||||
|
return unless mime
|
||||||
|
if mime.match /^[^\/]+\/.*pdf.*/g
|
||||||
|
@renderPDF file
|
||||||
|
else if mime.match /image\/.*/g
|
||||||
|
@renderImage file
|
||||||
|
else
|
||||||
|
@notify "Mime type #{file.info.mime} is not support"
|
||||||
|
|
||||||
|
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) ->
|
.then (pdf) ->
|
||||||
fn = (p) ->
|
fn = (p) ->
|
||||||
return if p > pdf.numPages
|
if p > pdf.numPages
|
||||||
|
me.setStatus "#{status} - loaded"
|
||||||
|
return me._api.loaded q, "OK"
|
||||||
pdf.getPage(p).then (page) ->
|
pdf.getPage(p).then (page) ->
|
||||||
scale = 1.5
|
scale = 1.5
|
||||||
viewport = page.getViewport scale
|
viewport = page.getViewport scale
|
||||||
@ -28,8 +61,55 @@ class Preview extends this.OS.GUI.BaseApplication
|
|||||||
canvasContext: context
|
canvasContext: context
|
||||||
viewport: viewport
|
viewport: viewport
|
||||||
page.render renderContext
|
page.render renderContext
|
||||||
|
me.setStatus "#{status} - #{p}/#{pdf.numPages} loaded"
|
||||||
fn(p+1)
|
fn(p+1)
|
||||||
fn(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
|
@ -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;
|
||||||
|
}
|
||||||
|
@ -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/.*"]
|
||||||
}
|
}
|
41661
src/packages/Preview/pdf.worker.js
vendored
41661
src/packages/Preview/pdf.worker.js
vendored
File diff suppressed because one or more lines are too long
@ -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>
|
Loading…
Reference in New Issue
Block a user