'use strict'; var Backbone = require('backbone'); var DragView = Backbone.View.extend({ events: { 'mousedown': 'mousedown' }, initialize: function (coord) { this.setCoord(coord); this.mouseDownTime = -1; this.mouseDownCount = 0; }, setCoord: function(coord) { this.coord = coord; this.offsetProp = 'page' + coord.toUpperCase(); }, render: function() { $('
').addClass('drag-handle__inner').appendTo(this.$el); }, mousedown: function(e) { if (e.which === 1) { var now = Date.now(); if (now - this.mouseDownTime < 500) { this.mouseDownCount++; if (this.mouseDownCount === 2) { this.trigger('autosize', { coord: this.coord }); return; } } else { this.mouseDownTime = now; this.mouseDownCount = 1; } this.initialOffset = e[this.offsetProp]; var cursor = this.$el.css('cursor'); this.dragMask = $('
', {'class': 'drag-mask'}).css('cursor', cursor).appendTo('body'); this.dragMask.on('mousemove', this.mousemove.bind(this)); this.dragMask.on('mouseup', this.mouseup.bind(this)); this.trigger('dragstart', { offset: this.initialOffset, coord: this.coord }); this.$el.addClass('dragging'); e.preventDefault(); } }, mousemove: function(e) { if (e.which === 0) { this.mouseup(); } else { this.trigger('drag', { offset: e[this.offsetProp] - this.initialOffset }); } }, mouseup: function() { this.dragMask.remove(); this.$el.removeClass('dragging'); } }); module.exports = DragView;