Merge pull request #791 from ONLYOFFICE/fix/drag-and-drop-bug

Fix/drag and drop bug
This commit is contained in:
Julia Radzhabova 2021-04-06 16:35:22 +03:00 committed by GitHub
commit 92c2682419
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 13 deletions

View file

@ -268,9 +268,15 @@ define([
}); });
tab.$el.children().on( tab.$el.children().on(
{dragstart: $.proxy(function (e) { {dragstart: $.proxy(function (e) {
var event = e.originalEvent, var event = e.originalEvent;
img = document.createElement('div'); if (!Common.Utils.isIE) {
var img = document.createElement('div');
event.dataTransfer.setDragImage(img, 0, 0); event.dataTransfer.setDragImage(img, 0, 0);
} else {
this.bar.selectTabs.forEach(function (tab) {
tab.$el.find('span').prop('title', '');
});
}
event.dataTransfer.effectAllowed = 'move'; event.dataTransfer.effectAllowed = 'move';
this.bar.trigger('tab:dragstart', event.dataTransfer, this.bar.selectTabs); this.bar.trigger('tab:dragstart', event.dataTransfer, this.bar.selectTabs);
}, this), }, this),
@ -279,8 +285,14 @@ define([
if (!this.bar.isEditFormula) { if (!this.bar.isEditFormula) {
this.bar.$el.find('.mousemove').removeClass('mousemove right'); this.bar.$el.find('.mousemove').removeClass('mousemove right');
$(e.currentTarget).parent().addClass('mousemove'); $(e.currentTarget).parent().addClass('mousemove');
var data = event.dataTransfer.getData("onlyoffice"); var data;
if (!Common.Utils.isIE) {
data = event.dataTransfer.getData('onlyoffice');
event.dataTransfer.dropEffect = data ? 'move' : 'none'; event.dataTransfer.dropEffect = data ? 'move' : 'none';
} else {
data = event.dataTransfer.getData('text');
event.dataTransfer.dropEffect = data === 'sheet' ? 'move' : 'none';
}
} else { } else {
event.dataTransfer.dropEffect = 'none'; event.dataTransfer.dropEffect = 'none';
} }
@ -356,8 +368,14 @@ define([
event.dataTransfer.effectAllowed = 'move'; event.dataTransfer.effectAllowed = 'move';
}, this)); }, this));
addEvent(this.$bar[0], 'dragenter', _.bind(function (event) { addEvent(this.$bar[0], 'dragenter', _.bind(function (event) {
var data = event.dataTransfer.getData("onlyoffice"); var data;
if (!Common.Utils.isIE) {
data = event.dataTransfer.getData('onlyoffice');
event.dataTransfer.dropEffect = (!this.isEditFormula && data) ? 'move' : 'none'; event.dataTransfer.dropEffect = (!this.isEditFormula && data) ? 'move' : 'none';
} else {
data = event.dataTransfer.getData('text');
event.dataTransfer.dropEffect = (data === 'sheet' && !this.isEditFormula) ? 'move' : 'none';
}
}, this)); }, this));
addEvent(this.$bar[0], 'dragover', _.bind(function (event) { addEvent(this.$bar[0], 'dragover', _.bind(function (event) {
if (event.preventDefault) { if (event.preventDefault) {

View file

@ -214,7 +214,7 @@ define([
onFieldsDragStart: function (item, index, event) { onFieldsDragStart: function (item, index, event) {
this._state.field = {record: item.model}; this._state.field = {record: item.model};
event.originalEvent.dataTransfer.effectAllowed = 'move'; event.originalEvent.dataTransfer.effectAllowed = 'move';
event.originalEvent.dataTransfer.setDragImage(this.getDragElement(item.model.get('value')), 14, 14); !Common.Utils.isIE && event.originalEvent.dataTransfer.setDragImage(this.getDragElement(item.model.get('value')), 14, 14);
this.pivotIndex = index; this.pivotIndex = index;
this.fromListView = this.fieldsList.$el[0].id; this.fromListView = this.fieldsList.$el[0].id;
}, },
@ -222,7 +222,7 @@ define([
onItemsDragStart: function (type, listview, item, index, event) { onItemsDragStart: function (type, listview, item, index, event) {
this._state.field = {record: item.model, type: type}; this._state.field = {record: item.model, type: type};
event.originalEvent.dataTransfer.effectAllowed = 'move'; event.originalEvent.dataTransfer.effectAllowed = 'move';
event.originalEvent.dataTransfer.setDragImage(this.getDragElement(item.model.get('value')), 14, 14); !Common.Utils.isIE && event.originalEvent.dataTransfer.setDragImage(this.getDragElement(item.model.get('value')), 14, 14);
this.itemIndex = index; this.itemIndex = index;
this.pivotIndex = listview.store.at(index).attributes.pivotIndex; this.pivotIndex = listview.store.at(index).attributes.pivotIndex;
this.fromListView = listview.$el[0].id; this.fromListView = listview.$el[0].id;

View file

@ -203,6 +203,7 @@ define([
}, this), }, this),
'tab:dragstart': _.bind(function (dataTransfer, selectTabs) { 'tab:dragstart': _.bind(function (dataTransfer, selectTabs) {
Common.Utils.isIE && (this.isDrop = false);
Common.UI.Menu.Manager.hideAll(); Common.UI.Menu.Manager.hideAll();
this.api.asc_closeCellEditor(); this.api.asc_closeCellEditor();
var arrTabs = [], var arrTabs = [],
@ -234,12 +235,18 @@ define([
arr.push({type: 'names', value: arrName}); arr.push({type: 'names', value: arrName});
arr.push({type: 'key', value: Common.Utils.InternalSettings.get("sse-doc-info-key")}); arr.push({type: 'key', value: Common.Utils.InternalSettings.get("sse-doc-info-key")});
var json = JSON.stringify(arr); var json = JSON.stringify(arr);
dataTransfer.setData("onlyoffice", json); if (!Common.Utils.isIE) {
dataTransfer.setData('onlyoffice', json);
} else {
dataTransfer.setData('text', 'sheet');
this.dataTransfer = json;
}
this.dropTabs = selectTabs; this.dropTabs = selectTabs;
}, this), }, this),
'tab:drop': _.bind(function (dataTransfer, index) { 'tab:drop': _.bind(function (dataTransfer, index) {
if (this.isEditFormula) return; if (this.isEditFormula || (Common.Utils.isIE && this.dataTransfer === undefined)) return;
var data = dataTransfer.getData("onlyoffice"); Common.Utils.isIE && (this.isDrop = true);
var data = !Common.Utils.isIE ? dataTransfer.getData('onlyoffice') : this.dataTransfer;
if (data) { if (data) {
var arrData = JSON.parse(data); var arrData = JSON.parse(data);
if (arrData) { if (arrData) {
@ -277,7 +284,7 @@ define([
} }
}, this), }, this),
'tab:dragend': _.bind(function (cut) { 'tab:dragend': _.bind(function (cut) {
if (cut) { if (cut && !(Common.Utils.isIE && this.isDrop === false)) {
if (this.dropTabs.length > 0) { if (this.dropTabs.length > 0) {
var arr = []; var arr = [];
this.dropTabs.forEach(function (tab) { this.dropTabs.forEach(function (tab) {
@ -287,6 +294,10 @@ define([
} }
} }
this.dropTabs = undefined; this.dropTabs = undefined;
if (Common.Utils.isIE) {
this.isDrop = undefined;
this.dataTransfer = undefined;
}
Common.NotificationCenter.trigger('tabs:dragend', this); Common.NotificationCenter.trigger('tabs:dragend', this);
}, this) }, this)
}); });