Skip to content
Snippets Groups Projects
Select Git revision
  • 97f7927b85fc48e05ea524d7ca886e91f3adf1cb
  • master default
  • JS-based-scroll-rendering
  • Paul_Marius_Level
  • Paul_Marius_2
  • Paul_Marius
  • Andi_Mark
  • be-UnityWebView
  • gitignoreFrameitServer
  • ZimmerBSc
  • Bugfix_StageLoading
  • stages
  • MAZIFAU_Experimental
  • tsc/coneworld
  • tsc/fact-interaction
  • marcel
  • MaZiFAU_TopSort
  • mergeHelper
  • zwischenSpeichern
  • tempAndrToMaster
  • SebBranch
  • 3.0
  • v2.1
  • v2.0
  • v1.0
25 results

AbstractAngleFact.cs

Blame
  • WebViewController.cs 11.61 KiB
    using bessw.Unity.WebView;
    using bessw.Unity.WebView.ChromeDevTools;
    using bessw.Unity.WebView.ChromeDevTools.Protocol.DOM;
    using MoreLinq;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using REST_JSON_API;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text.RegularExpressions;
    using UnityEngine;
    
    public class WebViewController : ScrollView
    {
        private WebViewComponent webViewComponent;
        private DomNodeWrapper[] dropzones;
    
        private void Awake()
        {
            webViewComponent = GetComponent<WebViewComponent>();
            WebViewComponent.serializerSettings.Converters.Add(new FactObjectUIConverter());
            webViewComponent.targetUrl = Path.Join(CommunicationEvents.Get_DataPath(), "scrollView.html");
            webViewComponent.OnWebViewComponentReady += OnWebViewComponentReady;
    
            // TODO: handle webViewComponent.onDomDocumentUpdated
        }
        private void OnWebViewComponentReady()
        {
            webViewComponent.onDomDocumentUpdated += DocumentUpdatedHandler;
            SwitchScrollUI.activeScrollData.OnScrollChanged.AddListener(SetScrollContent);
            SwitchScrollUI.activeScrollData.OnScrollDynamicInfoUpdated.AddListener(SetScrollContent);
            SwitchScrollUI.activeScrollData.HintAvailableEvent.AddListener(OnHintAvailable);
            webViewComponent.tab.AddJSBinding("applyScroll", ApplyScrollHandler);
            webViewComponent.tab.AddJSBinding("getHint", GetHintHandler);
            if (SwitchScrollUI.activeScrollData.Scroll is not null)
            {
                SetScrollContent(SwitchScrollUI.activeScrollData.Scroll);
            }
            RegisterBrowserEventhandlers();
        }
        private void OnDisable()
        {
            webViewComponent.onDomDocumentUpdated -= DocumentUpdatedHandler;
            SwitchScrollUI.activeScrollData.OnScrollChanged.RemoveListener(SetScrollContent);
            SwitchScrollUI.activeScrollData.OnScrollDynamicInfoUpdated.RemoveListener(SetScrollContent);
            webViewComponent.tab.RemoveJSBinding("applyScroll");
            webViewComponent.tab.RemoveJSBinding("getHint");
            DeRegisterBrowserEventhandlers();
        }
    
        private void DocumentUpdatedHandler(documentUpdatedEvent _)
        {
            // all old DomNodeWrapper objects are invalid, because the whole document has been updated
            dropzones = null;
            RegisterBrowserEventhandlers();
        }
    
        private async void RegisterBrowserEventhandlers()
        {
            // register js event handlers in the browser
            _ = webViewComponent.tab.Evaluate("addDropZoneEventListeners()");
            
            // register c# event handlers
            // get the dropzones from the scroll and add the event handler to track when something is dropped
            DomNodeWrapper document = await webViewComponent.tab.Document;
            dropzones = await document.querySelectorAllAsync("[dropzone='copy']");
            dropzones.ForEach(dropzone => dropzone.OnAttributeModified += DropzoneAttributeModifiedHandler);