diff --git a/editor/extensions/ext-server_opensave.js b/editor/extensions/ext-server_opensave.js index 5db88d44..0c492c1a 100644 --- a/editor/extensions/ext-server_opensave.js +++ b/editor/extensions/ext-server_opensave.js @@ -1,3 +1,4 @@ +/*globals svgEditor, svgCanvas, canvg, $*/ /* * ext-server_opensave.js * @@ -9,21 +10,39 @@ svgEditor.addExtension("server_opensave", { callback: function() { - - var save_svg_action = 'extensions/filesave.php'; - var save_img_action = 'extensions/filesave.php'; - - // Create upload target (hidden iframe) - var target = $('').hide().appendTo('body'); + 'use strict'; + function getFileNameFromTitle () { + var title = svgCanvas.getDocumentTitle(); + return $.trim(title).replace(/[^a-z0-9\.\_\-]+/gi, '_'); + } + function clientDownloadSupport (filename, suffix, uri) { + var a, + support = $('')[0].download === ''; + if (support) { + a = $('hidden').attr({download: (filename || 'image') + suffix, href: uri}).css('display', 'none').appendTo('body'); + a[0].click(); + return true; + } + } + var open_svg_action, import_svg_action, import_img_action, + open_svg_form, import_svg_form, import_img_form, + save_svg_action = 'extensions/filesave.php', + save_img_action = 'extensions/filesave.php', + // Create upload target (hidden iframe) + cancelled = false; + $('').hide().appendTo('body'); svgEditor.setCustomHandlers({ save: function(win, data) { - var svg = "\n" + data; + var svg = "\n" + data, + filename = getFileNameFromTitle(); + + //if (clientDownloadSupport(filename, '.svg', 'data:image/svg+xml,' + encodeURI(data))) { // Firefox limits size of file + if (clientDownloadSupport(filename, '.svg', 'data:image/svg+xml;base64,' + window.btoa(data))) { + return; + } - var title = svgCanvas.getDocumentTitle(); - var filename = $.trim(title).replace(/[^a-z0-9\.\_\-]+/gi, '_'); - - var form = $('