Compare commits

...

3 Commits

Author SHA1 Message Date
df63293977 tree data structure for the zooms of augment 2025-05-27 23:38:37 -04:00
b4f5abb7e1 added on/off purple numbers 'n', 'm' 2025-05-26 14:38:24 -04:00
13004c6d49 LEFT RIGHT purple numbers on/off 2025-05-26 14:29:37 -04:00
2 changed files with 124 additions and 17 deletions

View File

@ -1,4 +1,5 @@
import 'dart:js_interop'; import 'dart:js_interop';
import 'dart:js_interop_unsafe';
import 'package:web/web.dart' as web; import 'package:web/web.dart' as web;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'dart:ui_web' as ui; import 'dart:ui_web' as ui;
@ -28,6 +29,11 @@ class _CollapsableEmailsState extends State<CollapsableEmails> {
List<SerializableMessage> emailsInThread = []; List<SerializableMessage> emailsInThread = [];
bool _isLoaded = false; bool _isLoaded = false;
static bool _isListenerRegistered = false; static bool _isListenerRegistered = false;
static bool left = true;
static bool right = true;
web.EventListener? _listener;
List<String> hirarchy = ["h1", "h2", "h3", "h4", "h5", "h6", "p"];
List<String> tagsCollected = [];
@override @override
void initState() { void initState() {
@ -36,6 +42,13 @@ class _CollapsableEmailsState extends State<CollapsableEmails> {
_serializableData(widget.threadIDs); // this _serializableData(widget.threadIDs); // this
_keyListener(); _keyListener();
} }
// @override
// void dispose() {
// if (_listener != null) {
// web.window.document.removeEventListener('keydown', _listener!);
// }
// super.dispose();
// }
void _registerViewFactory(List<String> currentContent) async { void _registerViewFactory(List<String> currentContent) async {
// setState(() { //update to do item per item // setState(() { //update to do item per item
@ -89,28 +102,114 @@ class _CollapsableEmailsState extends State<CollapsableEmails> {
}); });
} }
void handleKeyDown(web.Event event) {
final keyEvent = event as web.KeyboardEvent;
if (keyEvent.key == 'G') {
print('You pressed the "G" key!');
final rightPurpleNums = web.document.getElementsByClassName("right");
_CollapsableEmailsState.right = !_CollapsableEmailsState.right;
final newOpacity = _CollapsableEmailsState.right ? '1.0' : '0.0';
for (int i = 0; i < rightPurpleNums.length; i++) {
final currentElement = rightPurpleNums.item(i) as web.HTMLElement;
currentElement.style.opacity = newOpacity;
}
} else if (keyEvent.key == 'H') {
print('You pressed the "H" key!');
final leftPurpleNums = web.document.getElementsByClassName("left");
_CollapsableEmailsState.left = !_CollapsableEmailsState.left;
final newOpacity = _CollapsableEmailsState.left ? '1.0' : '0.0';
for (int i = 0; i < leftPurpleNums.length; i++) {
final currentElement = leftPurpleNums.item(i) as web.HTMLElement;
currentElement.style.opacity = newOpacity;
}
} else if (keyEvent.key == 'm') {
print("you pressed 'm'");
final purpleNums = web.document.getElementsByClassName("purplenumber");
_CollapsableEmailsState.left = true;
_CollapsableEmailsState.right = true;
for (int i = 0; i < purpleNums.length; i++) {
final currentElement = purpleNums.item(i) as web.HTMLElement;
currentElement.style.opacity = '1.0';
}
} else if (keyEvent.key == 'n') {
print("you pressed 'n'");
final purpleNums = web.document.getElementsByClassName("purplenumber");
_CollapsableEmailsState.left = false;
_CollapsableEmailsState.right = false;
for (int i = 0; i < purpleNums.length; i++) {
final currentElement = purpleNums.item(i) as web.HTMLElement;
currentElement.style.opacity = '0.0';
}
} else if (keyEvent.key == 'w') {
print("you pressed 'w'");
getTopLevel();
}
}
void _keyListener() { void _keyListener() {
if (_isListenerRegistered) return; if (_isListenerRegistered) return;
_isListenerRegistered = true; _isListenerRegistered = true;
web.window.document.addEventListener(
'keydown',
((web.Event event) {
final keyEvent = event as web.KeyboardEvent;
if (keyEvent.key.toLowerCase() == 'k') { // Convert the top-level function to JS-compatible
print('You pressed the "k" key!'); _listener = handleKeyDown.toJS;
final leftPurpleNums = web.document.getElementsByClassName("right"); web.window.document.addEventListener('keydown', _listener!);
}
for (int i = 0; i < leftPurpleNums.length; i++) { void getTopLevel() {
final currentElement = leftPurpleNums.item(i) as web.HTMLElement; print("started top");
final opacity = web.window.getComputedStyle(currentElement).opacity; int highest = 0;
AugmentTree zoomTreeRoot = AugmentTree();
currentElement.style.opacity = // zoomTreeRoot.data = emailsHTML[0]; // whole thing
(opacity == '0') ? '1.0' : '0.0'; // works mostly
while (highest < hirarchy.length - 1) {
var highestElement = web.document.querySelectorAll(hirarchy[highest]);
print("nodelist $highestElement");
if (highestElement.isNull || highestElement.length == 0) {
//from h1, h2, h3, ..., p.
highest += 1;
print(hirarchy[highest]);
} else {
AugmentTree newLevel = AugmentTree(); // list of children of each level
for (int i = 0; i < highestElement.length; i++) {
print(highestElement.item(i)?.textContent);
tagsCollected
.add(highestElement.item(i)?.textContent ?? "nameless subtitle");
newLevel.children
.add(highestElement.item(i)?.textContent ?? "nameless subtitle");
}
// traverse to last node and add new level to it
// next
if (zoomTreeRoot.node == null) {
zoomTreeRoot.node = newLevel;
} else {
AugmentTree temp = zoomTreeRoot;
while (true) {
//get to the last and assign node = last node
if (temp.node != null) {
temp = temp.node!;
} else {
temp.node = newLevel;
break;
}
} }
} }
}).toJS,
); highest += 1;
}
}
print("out safely");
print(tagsCollected); //instead of a list make a tree
print(zoomTreeRoot.children);
print(zoomTreeRoot.node?.children);
print(zoomTreeRoot.node?.node?.children);
print(zoomTreeRoot.node?.node?.node?.children);
} }
@override @override

View File

@ -127,7 +127,8 @@ class AttachmentInfoList extends Iterable<AttachmentInfo> {
AttachmentInfoList(this._attachments); AttachmentInfoList(this._attachments);
factory AttachmentInfoList.fromJsonList(List<Map<String, dynamic>> jsonList) { factory AttachmentInfoList.fromJsonList(List<Map<String, dynamic>> jsonList) {
return AttachmentInfoList(jsonList.map((json) => AttachmentInfo.fromJson(json)).toList()); return AttachmentInfoList(
jsonList.map((json) => AttachmentInfo.fromJson(json)).toList());
} }
@override @override
@ -143,6 +144,13 @@ class AttachmentResponse {
AttachmentResponse({required this.name, required this.data}); AttachmentResponse({required this.name, required this.data});
factory AttachmentResponse.fromJson(Map<String, dynamic> json) { factory AttachmentResponse.fromJson(Map<String, dynamic> json) {
return AttachmentResponse(name: json["name"], data: Uint8List.fromList(List<int>.from(json["data"]))); return AttachmentResponse(
name: json["name"],
data: Uint8List.fromList(List<int>.from(json["data"])));
} }
} }
class AugmentTree {
List children = [];
AugmentTree? node;
}