Skip to content

Commit 9a03cd8

Browse files
keep scope for mouse drag, doulble/multiple clicks
1 parent 45ce8a2 commit 9a03cd8

File tree

1 file changed

+41
-8
lines changed

1 file changed

+41
-8
lines changed

zeppelin-web/src/app/notebook/notebook.controller.js

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl',
4040
$scope.interpreterBindings = [];
4141
$scope.isNoteDirty = null;
4242
$scope.saveTimer = null;
43+
$scope.paragraphClickFlag = 0;
44+
$scope.alreadyclicked = false;
45+
$scope.alreadyclickedTimeout = null;
4346

4447
var angularObjectRegistry = {};
4548
var connectedOnce = false;
@@ -95,17 +98,47 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl',
9598
if (!$scope.note) {
9699
return;
97100
}
98-
for (var i=0; i<$scope.note.paragraphs.length; i++) {
99-
var paragraphId = $scope.note.paragraphs[i].id;
100-
if (jQuery.contains(angular.element('#' + paragraphId + '_container')[0], clickEvent.target)) {
101-
$scope.$broadcast('focusParagraph', paragraphId, 0, true);
102-
break;
101+
try {
102+
for (var i = 0; i < $scope.note.paragraphs.length; i++) {
103+
var paragraphId = $scope.note.paragraphs[i].id;
104+
if (jQuery.contains(angular.element('#' + paragraphId + '_container')[0], clickEvent.target)) {
105+
$scope.$broadcast('focusParagraph', paragraphId, 0, true);
106+
break;
107+
}
103108
}
109+
} catch (e) {
110+
//nothing to worry. page changed.
104111
}
105112
};
106113

107-
// register mouseevent handler for focus paragraph
108-
document.addEventListener('click', $scope.focusParagraphOnClick);
114+
var doc = angular.element(document);
115+
116+
$scope.mouseDownHandler = function(evt) {
117+
doc.on('mouseup mousemove', function handler(evt) {
118+
if (evt.type === 'mouseup') {
119+
if ($scope.alreadyclicked) {
120+
// double
121+
if ($scope.alreadyclickedTimeout) {
122+
clearTimeout($scope.alreadyclickedTimeout);
123+
setTimeout(function() {
124+
// can be a tripple click
125+
$scope.alreadyclicked = false;
126+
}, 300);
127+
}
128+
} else {
129+
// single
130+
$scope.alreadyclicked = true;
131+
$scope.alreadyclickedTimeout = setTimeout(function() {
132+
$scope.alreadyclicked = false;
133+
$scope.focusParagraphOnClick(evt);
134+
}, 300);
135+
}
136+
}
137+
doc.off('mouseup mousemove', handler);
138+
});
139+
};
140+
141+
doc.on('mousedown', $scope.mouseDownHandler);
109142

110143

111144
$scope.keyboardShortcut = function(keyEvent) {
@@ -267,7 +300,7 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl',
267300
$scope.killSaveTimer();
268301
$scope.saveNote();
269302

270-
document.removeEventListener('click', $scope.focusParagraphOnClick);
303+
doc.off('mousedown');
271304
document.removeEventListener('keydown', $scope.keyboardShortcut);
272305
});
273306

0 commit comments

Comments
 (0)