|
@@ -1,14 +1,20 @@
|
|
|
|
+import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
+import 'package:flutter/widgets.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:http/http.dart' as http;
|
|
import 'dart:convert';
|
|
import 'dart:convert';
|
|
import 'dart:ui_web' as ui;
|
|
import 'dart:ui_web' as ui;
|
|
import 'dart:html' as html;
|
|
import 'dart:html' as html;
|
|
import 'dart:js' as js;
|
|
import 'dart:js' as js;
|
|
|
|
+import 'api_service.dart';
|
|
|
|
|
|
class EmailToolbar extends StatefulWidget {
|
|
class EmailToolbar extends StatefulWidget {
|
|
|
|
+ final Function(String) onJumpToSpan;
|
|
final VoidCallback onButtonPressed;
|
|
final VoidCallback onButtonPressed;
|
|
|
|
|
|
- EmailToolbar({Key? key, required this.onButtonPressed}) : super(key: key);
|
|
|
|
|
|
+ EmailToolbar(
|
|
|
|
+ {Key? key, required this.onButtonPressed, required this.onJumpToSpan})
|
|
|
|
+ : super(key: key);
|
|
|
|
|
|
@override
|
|
@override
|
|
_DynamicClassesAugment createState() => _DynamicClassesAugment();
|
|
_DynamicClassesAugment createState() => _DynamicClassesAugment();
|
|
@@ -16,6 +22,8 @@ class EmailToolbar extends StatefulWidget {
|
|
|
|
|
|
class _DynamicClassesAugment extends State<EmailToolbar> {
|
|
class _DynamicClassesAugment extends State<EmailToolbar> {
|
|
String selectedClass = 'Class 1';
|
|
String selectedClass = 'Class 1';
|
|
|
|
+ TextEditingController _jumpController = TextEditingController();
|
|
|
|
+
|
|
late final FocusNode _JumpItemfocusNode;
|
|
late final FocusNode _JumpItemfocusNode;
|
|
late final FocusNode _viewSpecsfocusNode;
|
|
late final FocusNode _viewSpecsfocusNode;
|
|
|
|
|
|
@@ -39,8 +47,9 @@ class _DynamicClassesAugment extends State<EmailToolbar> {
|
|
|
|
|
|
@override
|
|
@override
|
|
void dispose() {
|
|
void dispose() {
|
|
- _JumpItemfocusNode.dispose();
|
|
|
|
- _viewSpecsfocusNode.dispose();
|
|
|
|
|
|
+ // _JumpItemfocusNode.dispose();
|
|
|
|
+ // _viewSpecsfocusNode.dispose();
|
|
|
|
+ _jumpController.dispose();
|
|
super.dispose();
|
|
super.dispose();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -115,10 +124,17 @@ class _DynamicClassesAugment extends State<EmailToolbar> {
|
|
width: 150,
|
|
width: 150,
|
|
height: 30,
|
|
height: 30,
|
|
child: TextField(
|
|
child: TextField(
|
|
|
|
+ controller: _jumpController,
|
|
decoration: InputDecoration(
|
|
decoration: InputDecoration(
|
|
labelText: 'Jump Item',
|
|
labelText: 'Jump Item',
|
|
border: OutlineInputBorder(),
|
|
border: OutlineInputBorder(),
|
|
suffixIcon: Icon(Icons.search)),
|
|
suffixIcon: Icon(Icons.search)),
|
|
|
|
+ onSubmitted: (value) {
|
|
|
|
+ print("onSubmitted");
|
|
|
|
+ if (value.isNotEmpty) {
|
|
|
|
+ widget.onJumpToSpan(value);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
),
|
|
),
|
|
),
|
|
),
|
|
//TODO: Make an animation to make the button a textfield
|
|
//TODO: Make an animation to make the button a textfield
|
|
@@ -190,7 +206,7 @@ class AugmentClasses {
|
|
}
|
|
}
|
|
|
|
|
|
static void handleReload() {
|
|
static void handleReload() {
|
|
- print("Reload button pressed");
|
|
|
|
|
|
+ print("reload");
|
|
}
|
|
}
|
|
|
|
|
|
static void handleImages() {
|
|
static void handleImages() {
|
|
@@ -208,4 +224,62 @@ class AugmentClasses {
|
|
static void handleStop() {
|
|
static void handleStop() {
|
|
print("Stop button pressed");
|
|
print("Stop button pressed");
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ static void handleJump(String viewTypeId, String spanId) {
|
|
|
|
+ print(spanId);
|
|
|
|
+ // final jsCode = '''
|
|
|
|
+ // var iframe = document.getElementById("iframe#$viewTypeId").contentWindow;
|
|
|
|
+ // var element = iframe.document.getElementById('$spanId');
|
|
|
|
+ // if (element) {
|
|
|
|
+ // element.scrollIntoView({behavior: "smooth", block: "start"});
|
|
|
|
+ // }
|
|
|
|
+ // ''';
|
|
|
|
+// final jsCode = '''
|
|
|
|
+// var iframe = document.getElementById("$viewTypeId");
|
|
|
|
+// if (iframe) {
|
|
|
|
+// var iframeWindow = iframe.contentWindow;
|
|
|
|
+// if (iframeWindow && iframeWindow.document) {
|
|
|
|
+// var element = iframeWindow.document.getElementById('$spanId');
|
|
|
|
+// if (element) {
|
|
|
|
+// element.scrollIntoView({behavior: "smooth", block: "start"});
|
|
|
|
+// console.log("Scrolling to element with ID: $spanId");
|
|
|
|
+// } else {
|
|
|
|
+// console.error("Element with ID $spanId not found in iframe.");
|
|
|
|
+// }
|
|
|
|
+// } else {
|
|
|
|
+// console.error("Iframe contentWindow or document is not accessible.");
|
|
|
|
+// }
|
|
|
|
+// } else {
|
|
|
|
+// console.error("Iframe with ID $viewTypeId not found.");
|
|
|
|
+// }
|
|
|
|
+// ''';
|
|
|
|
+ // print('jumped'); // For debugging in Dart
|
|
|
|
+
|
|
|
|
+ // // Execute the JavaScript code
|
|
|
|
+ // js.context.callMethod('eval', [jsCode]);
|
|
|
|
+ // Select the first iframe on the page
|
|
|
|
+ String js_code = '''
|
|
|
|
+ var iframe = document.getElementsByTagName('iframe')[0]; // 0 for the first iframe, 1 for the second, etc.
|
|
|
|
+
|
|
|
|
+ // Check if the iframe is loaded and has content
|
|
|
|
+ if (iframe && iframe.contentDocument) {
|
|
|
|
+ // Access the document inside the iframe
|
|
|
|
+ var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
|
|
|
|
+
|
|
|
|
+ // Find the element with the specific id inside the iframe
|
|
|
|
+ var targetElement = iframeDoc.getElementById("$spanId"); // Replace '36 ' with the actual id of the target element
|
|
|
|
+
|
|
|
|
+ // If the element exists, scroll to it
|
|
|
|
+ if (targetElement) {
|
|
|
|
+ targetElement.scrollIntoView();
|
|
|
|
+ console.log('Scrolled to element with id "$spanId" inside the iframe.');
|
|
|
|
+ } else {
|
|
|
|
+ console.log('Element with id "$spanId" not found inside the iframe.');
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ console.log('Iframe not found or not loaded.');
|
|
|
|
+ }
|
|
|
|
+ ''';
|
|
|
|
+ js.context.callMethod('eval', [js_code]);
|
|
|
|
+ }
|
|
}
|
|
}
|