android/ios-adaption feature, markdown, and augment #6
					 2 changed files with 70 additions and 2 deletions
				
			
		| 
						 | 
					@ -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;
 | 
				
			||||||
| 
						 | 
					@ -31,6 +32,8 @@ class _CollapsableEmailsState extends State<CollapsableEmails> {
 | 
				
			||||||
  static bool left = true;
 | 
					  static bool left = true;
 | 
				
			||||||
  static bool right = true;
 | 
					  static bool right = true;
 | 
				
			||||||
  web.EventListener? _listener;
 | 
					  web.EventListener? _listener;
 | 
				
			||||||
 | 
					  List<String> hirarchy = ["h1", "h2", "h3", "h4", "h5", "h6", "p"];
 | 
				
			||||||
 | 
					  List<String> tagsCollected = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void initState() {
 | 
					  void initState() {
 | 
				
			||||||
| 
						 | 
					@ -140,6 +143,9 @@ class _CollapsableEmailsState extends State<CollapsableEmails> {
 | 
				
			||||||
        final currentElement = purpleNums.item(i) as web.HTMLElement;
 | 
					        final currentElement = purpleNums.item(i) as web.HTMLElement;
 | 
				
			||||||
        currentElement.style.opacity = '0.0';
 | 
					        currentElement.style.opacity = '0.0';
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    } else if (keyEvent.key == 'w') {
 | 
				
			||||||
 | 
					      print("you pressed 'w'");
 | 
				
			||||||
 | 
					      getTopLevel();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -152,6 +158,60 @@ class _CollapsableEmailsState extends State<CollapsableEmails> {
 | 
				
			||||||
    web.window.document.addEventListener('keydown', _listener!);
 | 
					    web.window.document.addEventListener('keydown', _listener!);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void getTopLevel() {
 | 
				
			||||||
 | 
					    print("started top");
 | 
				
			||||||
 | 
					    int highest = 0;
 | 
				
			||||||
 | 
					    AugmentTree zoomTreeRoot = AugmentTree();
 | 
				
			||||||
 | 
					    // zoomTreeRoot.data = emailsHTML[0]; // whole thing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        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
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return _isLoaded
 | 
					    return _isLoaded
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue