瀏覽代碼

Use an image element directly for the image handler

Steven Silvester 9 年之前
父節點
當前提交
aa3a5027c6
共有 2 個文件被更改,包括 12 次插入15 次删除
  1. 1 2
      examples/lab/index.html
  2. 11 13
      src/imagehandler/plugin.ts

+ 1 - 2
examples/lab/index.html

@@ -3,8 +3,7 @@
 <head>
   <title>Jupyter Plugins Demo</title>
   <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
-  <link rel="stylesheet" type="text/css" href="index.css">
-      <script id='jupyter-config-data' type="application/json">{ "baseUrl": "{{base_url}}", "wsUrl": "{{ws_url}}" }</script>
+  <script id='jupyter-config-data' type="application/json">{ "baseUrl": "{{base_url}}", "wsUrl": "{{ws_url}}" }</script>
   <script src="build/bundle.js" main="index"></script>
 </head>
 <body>

+ 11 - 13
src/imagehandler/plugin.ts

@@ -67,8 +67,8 @@ class ImageHandler extends AbstractFileHandler {
   protected createWidget(path: string): Widget {
     let ext = path.split('.').pop();
     var widget = new Widget();
-    let canvas = document.createElement('canvas');
-    widget.node.appendChild(canvas);
+    let image = document.createElement('img');
+    widget.node.appendChild(image);
     widget.node.style.overflowX = 'auto';
     widget.node.style.overflowY = 'auto';
     widget.title.text = path.split('/').pop();
@@ -79,17 +79,15 @@ class ImageHandler extends AbstractFileHandler {
    * Populate a widget from `IContentsModel`.
    */
   protected populateWidget(widget: Widget, model: IContentsModel): Promise<void> {
-    let ext = model.path.split('.').pop();
-    let uri = `data:${model.mimetype};${model.format},${model.content}`;
-    var img = new Image();
-    var canvas = widget.node.firstChild as HTMLCanvasElement;
-    img.addEventListener('load', () => {
-      canvas.width = img.naturalWidth;
-      canvas.height = img.naturalHeight;
-      let context = canvas.getContext('2d')
-      context.drawImage(img, 0, 0);
+    return new Promise<void>((resolve, reject) => {
+      let img = widget.node.firstChild as HTMLImageElement;
+      img.addEventListener('load', () => {
+        resolve(void 0);
+      });
+      img.addEventListener('error', error => {
+        reject(error);
+      });
+      img.src = `data:${model.mimetype};${model.format},${model.content}`;;
     });
-    img.src = uri;
-    return Promise.resolve(void 0);
   }
 }