Browse Source

Stop using `dragContent`

pull/758/head
Artur Arseniev 9 years ago
parent
commit
5569b64c53
  1. 12
      src/block_manager/view/BlockView.js
  2. 10
      src/utils/Droppable.js

12
src/block_manager/view/BlockView.js

@ -1,3 +1,4 @@
import { isObject } from 'underscore';
import { on, off, hasDnd } from 'utils/mixins'; import { on, off, hasDnd } from 'utils/mixins';
module.exports = Backbone.View.extend({ module.exports = Backbone.View.extend({
@ -32,11 +33,12 @@ module.exports = Backbone.View.extend({
handleDragStart(ev) { handleDragStart(ev) {
const content = this.model.get('content'); const content = this.model.get('content');
// Firefox requires setData const isObj = isObject(content);
ev.dataTransfer.setData('text', null); const type = isObj ? 'text/json' : 'text';
// Can't put the content in dataTransfer as it will not be available const data = isObj ? JSON.stringify(content) : content;
// on `dragenter` event for security reason console.log('handleDragStart', data);
this.config.em.set('dragContent', content); // Note: data are not available on dragenter for security reason
ev.dataTransfer.setData(type, data);
}, },
/** /**

10
src/utils/Droppable.js

@ -36,7 +36,7 @@ export default class Droppable {
// force out like in BlockView // force out like in BlockView
const sorter = this.sorter; const sorter = this.sorter;
cancel && (sorter.moved = 0); cancel && (sorter.moved = 0);
em.set('dragContent', ''); //em.set('dragContent', '');
sorter.endMove(); sorter.endMove();
em.trigger('canvas:dragend', ev); em.trigger('canvas:dragend', ev);
} }
@ -109,7 +109,6 @@ export default class Droppable {
const em = this.em; const em = this.em;
const types = dataTransfer.types; const types = dataTransfer.types;
const files = dataTransfer.files; const files = dataTransfer.files;
const dragContent = em.get('dragContent'); // Used by blocks
let content = dataTransfer.getData('text'); let content = dataTransfer.getData('text');
if (files.length) { if (files.length) {
@ -136,13 +135,14 @@ export default class Droppable {
attributes: { href: content }, attributes: { href: content },
content: content content: content
}; };
} else if (dragContent) { } else if (types.indexOf('text/json') >= 0) {
content = dragContent; const json = dataTransfer.getData('text/json');
json && (content = JSON.parse(json));
} else { } else {
content = content && `<div>${content}</div>`; content = content && `<div>${content}</div>`;
} }
const result = { content, dragContent }; const result = { content };
em.trigger('canvas:dragdata', dataTransfer, result); em.trigger('canvas:dragdata', dataTransfer, result);
return result; return result;

Loading…
Cancel
Save