diff --git a/editor/extensions/ext-imagelib.js b/editor/extensions/ext-imagelib.js index 5c2567fc..f151238e 100644 --- a/editor/extensions/ext-imagelib.js +++ b/editor/extensions/ext-imagelib.js @@ -46,13 +46,20 @@ svgEditor.addExtension("imagelib", function() { var mode = 's'; var multi_arr = []; - + var cur_meta; + var tranfer_stopped = false; + var pending = {}; + window.addEventListener("message", function(evt) { // Receive postMessage data var response = evt.data; if(!response) { - $.alert('No data was given', closeBrowser); + $.alert('No data was given', function() { + if(mode !== 'm') { + closeBrowser(); + } + }); return; } @@ -61,7 +68,47 @@ svgEditor.addExtension("imagelib", function() { var svg_str; var img_str; + if(char1 != "{" && tranfer_stopped) { + tranfer_stopped = false; + return; + } + + if(char1 == '|') { + var secondpos = response.indexOf('|', 1); + var id = response.substr(1, secondpos-1); + response = response.substr(secondpos+1); + char1 = response.charAt(0); + + } + + + // Hide possible transfer dialog box + $('#dialog_box').hide(); + switch (char1) { + case '{': + // Metadata + tranfer_stopped = false; + var cur_meta = JSON.parse(response); + + pending[cur_meta.id] = cur_meta; + + var message = 'Retrieving "' + (cur_meta.name || 'file') + '"...'; + + if(mode != 'm') { + $.process_cancel(message, function() { + tranfer_stopped = true; + // Should a message be sent back to the frame? + + $('#dialog_box').hide(); + }); + } else { + var entry = $('
' + message + '
').data('id', cur_meta.id); + preview.append(entry); + cur_meta.entry = entry; + } + + return; case '<': svg_str = true; break; @@ -84,7 +131,13 @@ svgEditor.addExtension("imagelib", function() { // Assume it's raw image data // importImage(str); - $.alert('Unexpected data was returned: ' + response, closeBrowser); + $.alert('Unexpected data was returned: ' + response, function() { + if(mode !== 'm') { + closeBrowser(); + } else { + pending[id].entry.remove(); + } + }); return; } @@ -101,12 +154,44 @@ svgEditor.addExtension("imagelib", function() { case 'm': // Import multiple multi_arr.push([(svg_str ? 'svg' : 'img'), response]); + var cur_meta = pending[id]; if(svg_str) { - var xml = new DOMParser().parseFromString(response, 'text/xml').documentElement; - var title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')'; - preview.append('
'+title+'
'); + if(cur_meta && cur_meta.name) { + title = cur_meta.name; + } else { + // Try to find a title + var xml = new DOMParser().parseFromString(response, 'text/xml').documentElement; + var title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')'; + } + if(cur_meta) { + preview.children().each(function() { + if($(this).data('id') == id) { + $(this).text(title); + } + }); + } else { + preview.append('
'+title+'
'); + } } else { - preview.append('
Raster image #' + response.length + '
'); + if(cur_meta && cur_meta.preview_url) { + var title = cur_meta.name || ''; + } + if(cur_meta && cur_meta.preview_url) { + var entry = '' + title; + } else { + var entry = ''; + } + + if(cur_meta) { + preview.children().each(function() { + if($(this).data('id') == id) { + $(this).html(entry); + } + }); + } else { + preview.append($('
').append(entry)); + } + } break; case 'o': @@ -293,6 +378,12 @@ svgEditor.addExtension("imagelib", function() { }\ #imglib_preview > div {\ padding: 5px;\ + font-size: 12px;\ + }\ + #imglib_preview img {\ + display: block;\ + margin: 0 auto;\ + max-height: 100px;\ }\ #imgbrowse li {\ list-style: none;\ diff --git a/editor/extensions/imagelib/index.html b/editor/extensions/imagelib/index.html index bc102c47..fab9dbad 100644 --- a/editor/extensions/imagelib/index.html +++ b/editor/extensions/imagelib/index.html @@ -13,10 +13,18 @@