mirror of https://github.com/keeweb/keeweb.git
fix #432: drag-drop in vivaldi
This commit is contained in:
parent
de1dc22fd2
commit
60e59da94d
|
@ -1,6 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
var DragDropInfo = {
|
||||
const DragDropInfo = {
|
||||
dragType: null,
|
||||
dragObject: null
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
|
||||
|
|
|
@ -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++) {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue