From 44fc88e8252e90fe97ed7664ea66eb7b5ea26485 Mon Sep 17 00:00:00 2001 From: Lightforger Date: Thu, 2 May 2013 09:09:40 +0300 Subject: [PATCH] fixes #1499 Additionally, also fixes the "stuck" when releasing on top of another note. --- app/assets/javascripts/notes.js | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 5956560da..2d49d888e 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -420,7 +420,8 @@ Danbooru.Note = { Danbooru.Note.TranslationMode.active = true; $("#original-file-link").click(); $("#image").one("click", function() { $(".note-box").show() }); /* override the 'hide all note boxes' click event */ - $("#image").one("mousedown", Danbooru.Note.TranslationMode.Drag.start).one("mouseup", Danbooru.Note.TranslationMode.Drag.stop); + $("#image").one("mousedown", Danbooru.Note.TranslationMode.Drag.start); + $(window).bind("mouseup", Danbooru.Note.TranslationMode.Drag.stop); Danbooru.notice('Click or drag on the image to create a note (shortcut is n)'); }, @@ -466,13 +467,29 @@ Danbooru.Note = { drag: function (e) { Danbooru.Note.TranslationMode.Drag.dragDistanceX = e.pageX - Danbooru.Note.TranslationMode.Drag.dragStartX; Danbooru.Note.TranslationMode.Drag.dragDistanceY = e.pageY - Danbooru.Note.TranslationMode.Drag.dragStartY; + var $image = $("#image"); + var offset = $image.offset(); + var limitX1 = $image.width() - Danbooru.Note.TranslationMode.Drag.dragStartX + offset.left - 1; + var limitX2 = offset.left - Danbooru.Note.TranslationMode.Drag.dragStartX; + var limitY1 = $image.height()- Danbooru.Note.TranslationMode.Drag.dragStartY + offset.top - 1; + var limitY2 = offset.top - Danbooru.Note.TranslationMode.Drag.dragStartY; + + if(Danbooru.Note.TranslationMode.Drag.dragDistanceX > limitX1) { + Danbooru.Note.TranslationMode.Drag.dragDistanceX = limitX1; + } else if(Danbooru.Note.TranslationMode.Drag.dragDistanceX < limitX2) { + Danbooru.Note.TranslationMode.Drag.dragDistanceX = limitX2; + } + + if(Danbooru.Note.TranslationMode.Drag.dragDistanceY > limitY1) { + Danbooru.Note.TranslationMode.Drag.dragDistanceY = limitY1; + } else if(Danbooru.Note.TranslationMode.Drag.dragDistanceY < limitY2) { + Danbooru.Note.TranslationMode.Drag.dragDistanceY = limitY2; + } if (Math.abs(Danbooru.Note.TranslationMode.Drag.dragDistanceX) > 9 && Math.abs(Danbooru.Note.TranslationMode.Drag.dragDistanceY) > 9) { Danbooru.Note.TranslationMode.Drag.dragging = true; /* must drag at least 10pixels (minimum note size) in both dimensions. */ } if (Danbooru.Note.TranslationMode.Drag.dragging) { - var offset = $("#image").offset(); - if (Danbooru.Note.TranslationMode.Drag.dragDistanceX >= 0) { Danbooru.Note.TranslationMode.Drag.x = Danbooru.Note.TranslationMode.Drag.dragStartX; Danbooru.Note.TranslationMode.Drag.w = Danbooru.Note.TranslationMode.Drag.dragDistanceX; @@ -498,9 +515,13 @@ Danbooru.Note = { }); } }, - + stop: function (e) { + if(Danbooru.Note.TranslationMode.Drag.dragStartX === 0) { + return; /* 'stop' is bound to window, don't create note if start wasn't triggered */ + } $(window).unbind("mousemove"); + if(Danbooru.Note.TranslationMode.Drag.dragging) { $('#note-helper').css({display:'none'}); Danbooru.Note.TranslationMode.create_note(e, true, Danbooru.Note.TranslationMode.Drag.x, Danbooru.Note.TranslationMode.Drag.y, Danbooru.Note.TranslationMode.Drag.w-1, Danbooru.Note.TranslationMode.Drag.h-1); @@ -508,6 +529,9 @@ Danbooru.Note = { } else { /* no dragging -> create a normal note */ Danbooru.Note.TranslationMode.create_note(e); } + $(window).unbind("mouseup", Danbooru.Note.TranslationMode.Drag.stop); + Danbooru.Note.TranslationMode.Drag.dragStartX = 0; + Danbooru.Note.TranslationMode.Drag.dragStartY = 0; } } },