diff --git a/app/scripts/comp/drag-drop-info.js b/app/scripts/comp/drag-drop-info.js index d536db16..b1aa03db 100644 --- a/app/scripts/comp/drag-drop-info.js +++ b/app/scripts/comp/drag-drop-info.js @@ -1,6 +1,7 @@ 'use strict'; -var DragDropInfo = { +const DragDropInfo = { + dragType: null, dragObject: null }; diff --git a/app/scripts/views/list-view.js b/app/scripts/views/list-view.js index 7a57c5af..f4e2a43b 100644 --- a/app/scripts/views/list-view.js +++ b/app/scripts/views/list-view.js @@ -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); }, diff --git a/app/scripts/views/menu/menu-item-view.js b/app/scripts/views/menu/menu-item-view.js index aecce70b..fbaaf4bb 100644 --- a/app/scripts/views/menu/menu-item-view.js +++ b/app/scripts/views/menu/menu-item-view.js @@ -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++) { diff --git a/release-notes.md b/release-notes.md index 60e18a82..ce0cd33f 100644 --- a/release-notes.md +++ b/release-notes.md @@ -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