').append(entry));
- submit.removeAttr('disabled');
- }
+ var pending = {};
+
+ var mode = 's';
+ var multiArr = [];
+ var transferStopped = false;
+ var preview = void 0,
+ submit = void 0;
+
+ window.addEventListener('message', function (evt) {
+ // Receive `postMessage` data
+ var response = evt.data;
+
+ if (!response || typeof response !== 'string') {
+ // Do nothing
+ return;
+ }
+ try {
+ // Todo: This block can be removed (and the above check changed to
+ // insist on an object) if embedAPI moves away from a string to
+ // an object (if IE9 support not needed)
+ response = JSON.parse(response);
+ if (response.namespace !== 'imagelib') {
+ return;
}
- break;
- case 'o':
- // Open
- if (!svgStr) {
- break;
- }
- svgEditor.openPrep(function (ok) {
- if (!ok) {
+ } catch (e) {
+ return;
+ }
+
+ var hasName = 'name' in response;
+ var hasHref = 'href' in response;
+
+ if (!hasName && transferStopped) {
+ transferStopped = false;
+ return;
+ }
+
+ var id = void 0;
+ if (hasHref) {
+ id = response.href;
+ response = response.data;
+ }
+
+ // Hide possible transfer dialog box
+ $('#dialog_box').hide();
+ var entry = void 0,
+ curMeta = void 0,
+ svgStr = void 0,
+ imgStr = void 0;
+ var type = hasName ? 'meta' : response.charAt(0);
+ switch (type) {
+ case 'meta':
+ {
+ // Metadata
+ transferStopped = false;
+ curMeta = response;
+
+ pending[curMeta.id] = curMeta;
+
+ var name = curMeta.name || 'file';
+
+ var message = uiStrings.notification.retrieving.replace('%s', name);
+
+ if (mode !== 'm') {
+ $.process_cancel(message, function () {
+ transferStopped = true;
+ // Should a message be sent back to the frame?
+
+ $('#dialog_box').hide();
+ });
+ } else {
+ entry = $('
' + message + '
').data('id', curMeta.id);
+ preview.append(entry);
+ curMeta.entry = entry;
+ }
+
return;
}
- svgCanvas.clear();
- svgCanvas.setSvgString(response);
- // updateCanvas();
- });
- closeBrowser();
- break;
- }
- }, true);
-
- function toggleMulti(show) {
- $('#lib_framewrap, #imglib_opts').css({ right: show ? 200 : 10 });
- if (!preview) {
- preview = $('
').css({
- position: 'absolute',
- top: 45,
- right: 10,
- width: 180,
- bottom: 45,
- background: '#fff',
- overflow: 'auto'
- }).insertAfter('#lib_framewrap');
-
- submit = $('
').appendTo('#imgbrowse').on('click touchend', function () {
- $.each(multiArr, function (i) {
- var type = this[0];
- var data = this[1];
- if (type === 'svg') {
- svgCanvas.importSvgString(data);
- } else {
- importImage(data);
+ case '<':
+ svgStr = true;
+ break;
+ case 'd':
+ {
+ if (response.startsWith('data:image/svg+xml')) {
+ var pre = 'data:image/svg+xml;base64,';
+ var src = response.substring(pre.length);
+ response = decode64(src);
+ svgStr = true;
+ break;
+ } else if (response.startsWith('data:image/')) {
+ imgStr = true;
+ break;
+ }
}
- svgCanvas.moveSelectedElements(i * 20, i * 20, false);
- });
- preview.empty();
- multiArr = [];
- $('#imgbrowse_holder').hide();
- }).css({
- position: 'absolute',
- bottom: 10,
- right: -10
- });
- }
+ // Else fall through
+ default:
+ // TODO: See if there's a way to base64 encode the binary data stream
+ // const str = 'data:;base64,' + svgedit.utilities.encode64(response, true);
- preview.toggle(show);
- submit.toggle(show);
- }
+ // Assume it's raw image data
+ // importImage(str);
- function showBrowser() {
- var browser = $('#imgbrowse');
- if (!browser.length) {
- $('
').insertAfter('#svg_docprops');
- browser = $('#imgbrowse');
-
- var allLibs = uiStrings.imagelib.select_lib;
-
- var libOpts = $('
').appendTo(browser);
- var frame = $('').prependTo(browser).hide().wrap('