fix #432: drag-drop in vivaldi

This commit is contained in:
antelle 2017-01-29 12:54:19 +01:00
parent de1dc22fd2
commit 60e59da94d
4 changed files with 27 additions and 2 deletions

View File

@ -1,6 +1,7 @@
'use strict';
var DragDropInfo = {
const DragDropInfo = {
dragType: null,
dragObject: null
};

View File

@ -229,6 +229,7 @@ var ListView = Backbone.View.extend({
var id = $(e.target).closest('.list__item').attr('id');
e.originalEvent.dataTransfer.setData('text/entry', id);
e.originalEvent.dataTransfer.effectAllowed = 'move';
DragDropInfo.dragType = 'text/entry';
DragDropInfo.dragObject = this.items.get(id);
},

View File

@ -10,6 +10,8 @@ var Backbone = require('backbone'),
var MenuItemView = Backbone.View.extend({
template: require('templates/menu/menu-item.hbs'),
isDropNotWorkingProperly: navigator.userAgent.indexOf('Vivaldi') > 0,
events: {
'mouseover': 'mouseover',
'mouseout': 'mouseout',
@ -22,6 +24,7 @@ var MenuItemView = Backbone.View.extend({
'dragover': 'dragover',
'dragleave': 'dragleave',
'drop': 'drop',
'mouseup': 'mouseup',
'dragover .menu__item-drag-top': 'dragoverTop',
'dragleave .menu__item-drag-top': 'dragleaveTop'
},
@ -196,6 +199,7 @@ var MenuItemView = Backbone.View.extend({
if (this.model.get('drag')) {
e.originalEvent.dataTransfer.setData('text/group', this.model.id);
e.originalEvent.dataTransfer.effectAllowed = 'move';
DragDropInfo.dragType = 'text/group';
DragDropInfo.dragObject = this.model;
}
},
@ -206,6 +210,9 @@ var MenuItemView = Backbone.View.extend({
e.preventDefault();
this.$el.addClass('menu__item--drag');
}
if (this.isDropNotWorkingProperly) {
this.canDrop = true;
}
},
dragleave(e) {
@ -213,11 +220,16 @@ var MenuItemView = Backbone.View.extend({
if (this.model.get('drop') && this.dropAllowed(e)) {
this.$el.removeClass('menu__item--drag menu__item--drag-top');
}
if (this.isDropNotWorkingProperly) {
setTimeout(() => {
this.canDrop = false;
}, 100);
}
},
drop(e) {
e.stopPropagation();
if (this.model.get('drop') && this.dropAllowed(e)) {
if (DragDropInfo.dragObject && this.model.get('drop') && this.dropAllowed(e)) {
let isTop = this.$el.hasClass('menu__item--drag-top');
this.$el.removeClass('menu__item--drag menu__item--drag-top');
if (isTop) {
@ -229,10 +241,20 @@ var MenuItemView = Backbone.View.extend({
this.model.moveHere(DragDropInfo.dragObject);
}
}
DragDropInfo.dragType = null;
DragDropInfo.dragObject = null;
Backbone.trigger('refresh');
}
},
mouseup(e) {
// fix #432: drag-drop in vivaldi. Why drop is not firing?
if (this.isDropNotWorkingProperly && this.canDrop) {
e.originalEvent.dataTransfer = { types: [DragDropInfo.dragType] };
this.drop(e);
}
},
dropTopAllowed(e) {
var types = e.originalEvent.dataTransfer.types;
for (let i = 0; i < types.length; i++) {

View File

@ -7,6 +7,7 @@ Release notes
`+` auto-lock in 12 hours or day
`+` text fields context menu on desktop
`+` option to disable latest file removal
`-` fix #432: drag-drop in vivaldi
##### v1.3.3 (2016-09-20)
`+` translations: fr, pl, pt