72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.IO; | |||
|  | using UnityEditor; | |||
|  | using UnityEngine; | |||
|  | 
 | |||
|  | namespace WeChatWASM.MDV | |||
|  | { | |||
|  |     public class HandlerNavigate | |||
|  |     { | |||
|  |         public History  History; | |||
|  |         public string   CurrentPath; | |||
|  | 
 | |||
|  |         public Action<float>        ScrollTo; | |||
|  |         public Func<string,Block>   FindBlock; | |||
|  | 
 | |||
|  |         //------------------------------------------------------------------------------ | |||
|  | 
 | |||
|  |         public void SelectPage( string url ) | |||
|  |         { | |||
|  |             if( string.IsNullOrEmpty( url ) ) | |||
|  |             { | |||
|  |                 return; | |||
|  |             } | |||
|  | 
 | |||
|  |             // internal link | |||
|  | 
 | |||
|  |             if( url.StartsWith( "#" ) ) | |||
|  |             { | |||
|  |                 var block = FindBlock( url.ToLower() ); | |||
|  | 
 | |||
|  |                 if( block != null ) | |||
|  |                 { | |||
|  |                     ScrollTo( block.Rect.y ); | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     Debug.LogWarning( string.Format( "Unable to find section header {0}", url ) ); | |||
|  |                 } | |||
|  | 
 | |||
|  |                 return; | |||
|  |             } | |||
|  | 
 | |||
|  |             // relative or absolute link ... | |||
|  | 
 | |||
|  |             var newPath = string.Empty; | |||
|  | 
 | |||
|  |             if( url.StartsWith( "/" ) ) | |||
|  |             { | |||
|  |                 newPath = url.Substring( 1 ); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 newPath = Utils.PathCombine( Path.GetDirectoryName( CurrentPath ), url ); | |||
|  |             } | |||
|  | 
 | |||
|  |             // load file | |||
|  | 
 | |||
|  |             var asset = AssetDatabase.LoadAssetAtPath<TextAsset>( newPath ); | |||
|  | 
 | |||
|  |             if( asset != null ) | |||
|  |             { | |||
|  |                 History.Add( newPath ); | |||
|  |                 Selection.activeObject = asset; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 Debug.LogError( string.Format( "Could not find asset {0}", newPath ) ); | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |