git-svn-id: http://svg-edit.googlecode.com/svn/trunk@2666 eee81c28-f429-11dd-99c0-75d572ba1ddd
This commit is contained in:
Brett Zamir
2014-02-02 00:34:04 +00:00
parent adbec3e33e
commit a5083f0394

View File

@@ -1,3 +1,5 @@
/*globals $, svgEditor, svgedit, svgCanvas, DOMParser*/
/*jslint vars: true, eqeq: true, es5: true, todo: true */
/* /*
* ext-imagelib.js * ext-imagelib.js
* *
@@ -7,7 +9,7 @@
* *
*/ */
svgEditor.addExtension("imagelib", function() { svgEditor.addExtension("imagelib", function() {'use strict';
var uiStrings = svgEditor.uiStrings; var uiStrings = svgEditor.uiStrings;
@@ -59,50 +61,50 @@ svgEditor.addExtension("imagelib", function() {
var cur_meta; var cur_meta;
var tranfer_stopped = false; var tranfer_stopped = false;
var pending = {}; var pending = {};
var preview, submit;
window.addEventListener("message", function(evt) {
window.addEventListener("message", function(evt) {
// Receive postMessage data // Receive postMessage data
var response = evt.data; var response = evt.data;
if(!response || typeof response !== "string") { // Todo: Should namespace postMessage API for this extension and filter out here if (!response || typeof response !== "string") { // Todo: Should namespace postMessage API for this extension and filter out here
// Do nothing // Do nothing
return; return;
} }
try { // This block can be removed if embedAPI moves away from a string to an object (if IE9 support not needed) try { // This block can be removed if embedAPI moves away from a string to an object (if IE9 support not needed)
var res = JSON.parse(response); var res = JSON.parse(response);
if (res.namespace) { // Part of embedAPI communications if (res.namespace) { // Part of embedAPI communications
return; return;
} }
} }
catch (e) {} catch (e) {}
var char1 = response.charAt(0); var char1 = response.charAt(0);
var id;
var svg_str; var svg_str;
var img_str; var img_str;
if(char1 != "{" && tranfer_stopped) { if (char1 != "{" && tranfer_stopped) {
tranfer_stopped = false; tranfer_stopped = false;
return; return;
} }
if(char1 == '|') { if (char1 == '|') {
var secondpos = response.indexOf('|', 1); var secondpos = response.indexOf('|', 1);
var id = response.substr(1, secondpos-1); id = response.substr(1, secondpos-1);
response = response.substr(secondpos+1); response = response.substr(secondpos+1);
char1 = response.charAt(0); char1 = response.charAt(0);
} }
// Hide possible transfer dialog box // Hide possible transfer dialog box
$('#dialog_box').hide(); $('#dialog_box').hide();
var entry, cur_meta;
switch (char1) { switch (char1) {
case '{': case '{':
// Metadata // Metadata
tranfer_stopped = false; tranfer_stopped = false;
var cur_meta = JSON.parse(response); cur_meta = JSON.parse(response);
pending[cur_meta.id] = cur_meta; pending[cur_meta.id] = cur_meta;
@@ -110,7 +112,7 @@ svgEditor.addExtension("imagelib", function() {
var message = uiStrings.notification.retrieving.replace('%s', name); var message = uiStrings.notification.retrieving.replace('%s', name);
if(mode != 'm') { if (mode != 'm') {
$.process_cancel(message, function() { $.process_cancel(message, function() {
tranfer_stopped = true; tranfer_stopped = true;
// Should a message be sent back to the frame? // Should a message be sent back to the frame?
@@ -118,7 +120,7 @@ svgEditor.addExtension("imagelib", function() {
$('#dialog_box').hide(); $('#dialog_box').hide();
}); });
} else { } else {
var entry = $('<div>' + message + '</div>').data('id', cur_meta.id); entry = $('<div>' + message + '</div>').data('id', cur_meta.id);
preview.append(entry); preview.append(entry);
cur_meta.entry = entry; cur_meta.entry = entry;
} }
@@ -128,46 +130,46 @@ svgEditor.addExtension("imagelib", function() {
svg_str = true; svg_str = true;
break; break;
case 'd': case 'd':
if(response.indexOf('data:image/svg+xml') === 0) { if (response.indexOf('data:image/svg+xml') === 0) {
var pre = 'data:image/svg+xml;base64,'; var pre = 'data:image/svg+xml;base64,';
var src = response.substring(pre.length); var src = response.substring(pre.length);
response = svgedit.utilities.decode64(src); response = svgedit.utilities.decode64(src);
svg_str = true; svg_str = true;
break; break;
} else if(response.indexOf('data:image/') === 0) { } else if (response.indexOf('data:image/') === 0) {
img_str = true; img_str = true;
break; break;
} }
// Else fall through // Else fall through
default: default:
// TODO: See if there's a way to base64 encode the binary data stream // TODO: See if there's a way to base64 encode the binary data stream
// var str = 'data:;base64,' + svgedit.utilities.encode64(response, true); // var str = 'data:;base64,' + svgedit.utilities.encode64(response, true);
// Assume it's raw image data // Assume it's raw image data
// importImage(str); // importImage(str);
// Don't give warning as postMessage may have been used by something else // Don't give warning as postMessage may have been used by something else
if(mode !== 'm') { if (mode !== 'm') {
closeBrowser(); closeBrowser();
} else { } else {
pending[id].entry.remove(); pending[id].entry.remove();
} }
// $.alert('Unexpected data was returned: ' + response, function() { // $.alert('Unexpected data was returned: ' + response, function() {
// if(mode !== 'm') { // if (mode !== 'm') {
// closeBrowser(); // closeBrowser();
// } else { // } else {
// pending[id].entry.remove(); // pending[id].entry.remove();
// } // }
// }); // });
return; return;
} }
switch (mode) { switch (mode) {
case 's': case 's':
// Import one // Import one
if(svg_str) { if (svg_str) {
svgCanvas.importSvgString(response); svgCanvas.importSvgString(response);
} else if(img_str) { } else if (img_str) {
importImage(response); importImage(response);
} }
closeBrowser(); closeBrowser();
@@ -175,19 +177,20 @@ svgEditor.addExtension("imagelib", function() {
case 'm': case 'm':
// Import multiple // Import multiple
multi_arr.push([(svg_str ? 'svg' : 'img'), response]); multi_arr.push([(svg_str ? 'svg' : 'img'), response]);
var cur_meta = pending[id]; var title;
if(svg_str) { cur_meta = pending[id];
if(cur_meta && cur_meta.name) { if (svg_str) {
var title = cur_meta.name; if (cur_meta && cur_meta.name) {
} else { title = cur_meta.name;
} else {
// Try to find a title // Try to find a title
var xml = new DOMParser().parseFromString(response, 'text/xml').documentElement; var xml = new DOMParser().parseFromString(response, 'text/xml').documentElement;
var title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')'; title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')';
} }
if(cur_meta) { if (cur_meta) {
preview.children().each(function() { preview.children().each(function() {
if($(this).data('id') == id) { if ($(this).data('id') == id) {
if(cur_meta.preview_url) { if (cur_meta.preview_url) {
$(this).html('<img src="' + cur_meta.preview_url + '">' + title); $(this).html('<img src="' + cur_meta.preview_url + '">' + title);
} else { } else {
$(this).text(title); $(this).text(title);
@@ -200,18 +203,18 @@ svgEditor.addExtension("imagelib", function() {
submit.removeAttr('disabled'); submit.removeAttr('disabled');
} }
} else { } else {
if(cur_meta && cur_meta.preview_url) { if (cur_meta && cur_meta.preview_url) {
var title = cur_meta.name || ''; title = cur_meta.name || '';
} }
if(cur_meta && cur_meta.preview_url) { if (cur_meta && cur_meta.preview_url) {
var entry = '<img src="' + cur_meta.preview_url + '">' + title; entry = '<img src="' + cur_meta.preview_url + '">' + title;
} else { } else {
var entry = '<img src="' + response + '">'; entry = '<img src="' + response + '">';
} }
if(cur_meta) { if (cur_meta) {
preview.children().each(function() { preview.children().each(function() {
if($(this).data('id') == id) { if ($(this).data('id') == id) {
$(this).html(entry); $(this).html(entry);
submit.removeAttr('disabled'); submit.removeAttr('disabled');
} }
@@ -225,9 +228,9 @@ svgEditor.addExtension("imagelib", function() {
break; break;
case 'o': case 'o':
// Open // Open
if(!svg_str) break; if (!svg_str) {break;}
svgEditor.openPrep(function(ok) { svgEditor.openPrep(function(ok) {
if(!ok) return; if (!ok) {return;}
svgCanvas.clear(); svgCanvas.clear();
svgCanvas.setSvgString(response); svgCanvas.setSvgString(response);
// updateCanvas(); // updateCanvas();
@@ -236,13 +239,11 @@ svgEditor.addExtension("imagelib", function() {
break; break;
} }
}, true); }, true);
var preview, submit;
function toggleMulti(show) { function toggleMulti(show) {
$('#lib_framewrap, #imglib_opts').css({right: (show ? 200 : 10)}); $('#lib_framewrap, #imglib_opts').css({right: (show ? 200 : 10)});
if(!preview) { if (!preview) {
preview = $('<div id=imglib_preview>').css({ preview = $('<div id=imglib_preview>').css({
position: 'absolute', position: 'absolute',
top: 45, top: 45,
@@ -259,7 +260,7 @@ svgEditor.addExtension("imagelib", function() {
$.each(multi_arr, function(i) { $.each(multi_arr, function(i) {
var type = this[0]; var type = this[0];
var data = this[1]; var data = this[1];
if(type == 'svg') { if (type == 'svg') {
svgCanvas.importSvgString(data); svgCanvas.importSvgString(data);
} else { } else {
importImage(data); importImage(data);
@@ -284,7 +285,7 @@ svgEditor.addExtension("imagelib", function() {
function showBrowser() { function showBrowser() {
var browser = $('#imgbrowse'); var browser = $('#imgbrowse');
if(!browser.length) { if (!browser.length) {
$('<div id=imgbrowse_holder><div id=imgbrowse class=toolbar_button>\ $('<div id=imgbrowse_holder><div id=imgbrowse class=toolbar_button>\
</div></div>').insertAfter('#svg_docprops'); </div></div>').insertAfter('#svg_docprops');
browser = $('#imgbrowse'); browser = $('#imgbrowse');
@@ -338,6 +339,7 @@ svgEditor.addExtension("imagelib", function() {
case 'm': case 'm':
// Import multiple // Import multiple
toggleMulti(true); toggleMulti(true);
break;
} }
}).css({ }).css({
'margin-top': 10 'margin-top': 10
@@ -453,6 +455,6 @@ svgEditor.addExtension("imagelib", function() {
}\ }\
').appendTo('head'); ').appendTo('head');
} }
} };
}); });