Update assets/js/script.js
Browse files- assets/js/script.js +14 -14
assets/js/script.js
CHANGED
@@ -442,16 +442,14 @@ class GestureDetector {
|
|
442 |
|
443 |
detectGesture(landmarks) {
|
444 |
try {
|
445 |
-
// Convert to pixel coordinates for easier calculation
|
446 |
const indexTip = landmarks[8];
|
447 |
const middleTip = landmarks[12];
|
448 |
-
const wrist = landmarks[0];
|
449 |
|
450 |
-
//
|
451 |
-
// Fix: Proper Y-axis calculation (inverted in MediaPipe)
|
452 |
const screenX = indexTip.x * window.innerWidth;
|
453 |
-
const screenY = (1 - indexTip.y) * window.innerHeight;
|
454 |
|
|
|
455 |
if (indexTip.y < middleTip.y) {
|
456 |
this.checkEmailSelection(screenX, screenY);
|
457 |
} else {
|
@@ -469,7 +467,7 @@ class GestureDetector {
|
|
469 |
}
|
470 |
|
471 |
// Get palm center for gesture detection
|
472 |
-
|
473 |
const palmCenterX = (wrist.x + landmarks[9].x) / 2;
|
474 |
const palmCenterY = (wrist.y + landmarks[9].y) / 2;
|
475 |
|
@@ -533,14 +531,18 @@ class GestureDetector {
|
|
533 |
|
534 |
checkEmailSelection(x, y) {
|
535 |
try {
|
536 |
-
//
|
|
|
|
|
|
|
|
|
537 |
for (let i = this.uiManager.emailElements.length - 1; i >= 0; i--) {
|
538 |
const email = this.uiManager.emailElements[i];
|
539 |
if (email.rect &&
|
540 |
-
x >= email.rect.left &&
|
541 |
x <= email.rect.right &&
|
542 |
-
|
543 |
-
|
544 |
|
545 |
// Only select if it's a different email
|
546 |
if (this.selectedEmailId !== email.id) {
|
@@ -557,8 +559,8 @@ class GestureDetector {
|
|
557 |
email.rect &&
|
558 |
x >= email.rect.left &&
|
559 |
x <= email.rect.right &&
|
560 |
-
|
561 |
-
|
562 |
this.uiManager.clearSelection();
|
563 |
this.selectedEmailId = null;
|
564 |
this.debugManager.updateSelectedEmail(null);
|
@@ -578,7 +580,6 @@ class GestureDetector {
|
|
578 |
switch (gesture) {
|
579 |
case 'swipe_left':
|
580 |
this.uiManager.showActionFeedback(`🗑️ Deleted: ${email.subject}`, 'delete');
|
581 |
-
// Remove from UI
|
582 |
const index = emails.findIndex(e => e.id === this.selectedEmailId);
|
583 |
if (index !== -1) emails.splice(index, 1);
|
584 |
this.uiManager.renderEmails();
|
@@ -588,7 +589,6 @@ class GestureDetector {
|
|
588 |
|
589 |
case 'swipe_right':
|
590 |
this.uiManager.showActionFeedback(`✅ Archived: ${email.subject}`, 'archive');
|
591 |
-
// In a real app, we'd move to archive
|
592 |
const archiveIndex = emails.findIndex(e => e.id === this.selectedEmailId);
|
593 |
if (archiveIndex !== -1) emails.splice(archiveIndex, 1);
|
594 |
this.uiManager.renderEmails();
|
|
|
442 |
|
443 |
detectGesture(landmarks) {
|
444 |
try {
|
|
|
445 |
const indexTip = landmarks[8];
|
446 |
const middleTip = landmarks[12];
|
|
|
447 |
|
448 |
+
// 🔥 CRITICAL FIX: Account for 60px header height!
|
|
|
449 |
const screenX = indexTip.x * window.innerWidth;
|
450 |
+
const screenY = (1 - indexTip.y) * (window.innerHeight - 60); // Subtract header height
|
451 |
|
452 |
+
// Pointing detection (index finger higher than middle)
|
453 |
if (indexTip.y < middleTip.y) {
|
454 |
this.checkEmailSelection(screenX, screenY);
|
455 |
} else {
|
|
|
467 |
}
|
468 |
|
469 |
// Get palm center for gesture detection
|
470 |
+
const wrist = landmarks[0];
|
471 |
const palmCenterX = (wrist.x + landmarks[9].x) / 2;
|
472 |
const palmCenterY = (wrist.y + landmarks[9].y) / 2;
|
473 |
|
|
|
531 |
|
532 |
checkEmailSelection(x, y) {
|
533 |
try {
|
534 |
+
// Convert to page-relative coordinates (accounting for scroll)
|
535 |
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
536 |
+
const adjustedY = y + scrollTop;
|
537 |
+
|
538 |
+
// Find the email under the finger
|
539 |
for (let i = this.uiManager.emailElements.length - 1; i >= 0; i--) {
|
540 |
const email = this.uiManager.emailElements[i];
|
541 |
if (email.rect &&
|
542 |
+
x >= email.rect.left &&
|
543 |
x <= email.rect.right &&
|
544 |
+
adjustedY >= email.rect.top &&
|
545 |
+
adjustedY <= email.rect.bottom) {
|
546 |
|
547 |
// Only select if it's a different email
|
548 |
if (this.selectedEmailId !== email.id) {
|
|
|
559 |
email.rect &&
|
560 |
x >= email.rect.left &&
|
561 |
x <= email.rect.right &&
|
562 |
+
adjustedY >= email.rect.top &&
|
563 |
+
adjustedY <= email.rect.bottom)) {
|
564 |
this.uiManager.clearSelection();
|
565 |
this.selectedEmailId = null;
|
566 |
this.debugManager.updateSelectedEmail(null);
|
|
|
580 |
switch (gesture) {
|
581 |
case 'swipe_left':
|
582 |
this.uiManager.showActionFeedback(`🗑️ Deleted: ${email.subject}`, 'delete');
|
|
|
583 |
const index = emails.findIndex(e => e.id === this.selectedEmailId);
|
584 |
if (index !== -1) emails.splice(index, 1);
|
585 |
this.uiManager.renderEmails();
|
|
|
589 |
|
590 |
case 'swipe_right':
|
591 |
this.uiManager.showActionFeedback(`✅ Archived: ${email.subject}`, 'archive');
|
|
|
592 |
const archiveIndex = emails.findIndex(e => e.id === this.selectedEmailId);
|
593 |
if (archiveIndex !== -1) emails.splice(archiveIndex, 1);
|
594 |
this.uiManager.renderEmails();
|