Merge branch 'imagePaste' into staging

pull/1/head
ansuz 4 years ago
commit 46b0a311c0

@ -75,6 +75,21 @@ define([
}
};
module.handleImagePaste = function (editor) {
// Don't paste file path in the users wants to paste a file
editor.on('paste', function (editor, ev) {
try {
if (!ev.clipboardData.items) { return; }
var items = Array.prototype.slice.apply(ev.clipboardData.items);
var hasFile = items.some(function (el) {
return el.kind === "file";
});
if (!hasFile) { return; }
ev.preventDefault();
} catch (e) { console.error(e); }
});
};
module.getHeadingText = function (editor) {
var lines = editor.getValue().split(/\n/);
@ -234,6 +249,8 @@ define([
editor.scrollIntoView(cursor);
});
module.handleImagePaste(editor);
var setMode = exp.setMode = function (mode, cb) {
exp.highlightMode = mode;
if (mode === 'markdown') { mode = 'gfm'; }

@ -528,6 +528,26 @@ define([
$hoverArea.removeClass('cp-fileupload-hovering');
onFileDrop(dropped, e);
});
// Upload files on paste
$area.on('paste', function (e) {
try {
var ev = e.originalEvent;
if (!ev.clipboardData.items) { return; }
var items = Array.prototype.slice.apply(ev.clipboardData.items);
var hasFile = items.some(function (el) {
return el.kind === "file";
});
if (!hasFile) { return; }
ev.preventDefault();
items.forEach(function (el) {
if (el.kind !== "file") { return; }
var file = el.getAsFile();
handleFile(file, e);
});
} catch (err) { console.error(err); }
});
};
var createCkeditorDropHandler = function () {
var editor = config.ckeditor;

@ -725,6 +725,7 @@ define([
var fmConfig = {
ckeditor: editor,
dropArea: $inner,
body: $('body'),
onUploaded: function(ev, data) {
var parsed = Hash.parsePadUrl(data.url);
@ -743,7 +744,24 @@ define([
editor.widgets.initOn(element, 'mediatag');
}
};
window.APP.FM = framework._.sfCommon.createFileManager(fmConfig);
var FM = window.APP.FM = framework._.sfCommon.createFileManager(fmConfig);
editor.on('paste', function (ev) {
try {
var files = ev.data.dataTransfer._.files;
files.forEach(function (f) {
FM.handleFile(f);
});
// If the paste data contains files, don't use the ckeditor default handlers
// ==> they would try to include either a remote image URL or a base64 image
if (files.length) {
ev.cancel();
ev.preventDefault();
}
} catch (e) {
console.error(e);
}
});
framework._.sfCommon.getAttribute(['pad', 'spellcheck'], function(err, data) {
if (framework.isReadOnly()) { return; }

@ -2,6 +2,7 @@ define([
'jquery',
'/common/toolbar.js',
'/common/common-util.js',
'/common/common-hash.js',
'/bower_components/nthen/index.js',
'/common/sframe-common.js',
'/common/common-realtime.js',
@ -32,6 +33,7 @@ define([
$,
Toolbar,
Util,
Hash,
nThen,
SFCommon,
CommonRealtime,
@ -940,6 +942,25 @@ define([
$('.CodeMirror').parent().prepend(markdownTb.toolbar);
APP.toolbar.$bottomL.append(markdownTb.button);
// Add drop and paste handlers
var privateData = metadataMgr.getPrivateData();
var fmConfig = {
dropArea: $('.CodeMirror'),
body: $('body'),
onUploaded: function (ev, data) {
var parsed = Hash.parsePadUrl(data.url);
var secret = Hash.getSecrets('file', parsed.hash, data.password);
var fileHost = privateData.fileHost || privateData.origin;
var src = fileHost + Hash.getBlobPathFromHex(secret.channel);
var key = Hash.encodeBase64(secret.keys.cryptKey);
var mt = '<media-tag src="' + src + '" data-crypto-key="cryptpad:' + key + '"></media-tag>';
APP.editor.replaceSelection(mt);
}
};
common.createFileManager(fmConfig);
SframeCM.handleImagePaste(APP.editor);
// Initialize author name for comments.
// Disable name modification for logged in users
var $cName = APP.$addComment.find('.cp-app-poll-comments-add-name')

Loading…
Cancel
Save