mirror of
				https://github.com/SoPat712/YTLitePlus.git
				synced 2025-10-30 20:34:04 -04:00 
			
		
		
		
	added files via upload
This commit is contained in:
		
							
								
								
									
										143
									
								
								Tweaks/FLEX/GlobalStateExplorers/FLEXWebViewController.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								Tweaks/FLEX/GlobalStateExplorers/FLEXWebViewController.m
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,143 @@ | ||||
| // | ||||
| //  FLEXWebViewController.m | ||||
| //  Flipboard | ||||
| // | ||||
| //  Created by Ryan Olson on 6/10/14. | ||||
| //  Copyright (c) 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import "FLEXWebViewController.h" | ||||
| #import "FLEXUtility.h" | ||||
| #import <WebKit/WebKit.h> | ||||
|  | ||||
| @interface FLEXWebViewController () <WKNavigationDelegate> | ||||
|  | ||||
| @property (nonatomic) WKWebView *webView; | ||||
| @property (nonatomic) NSString *originalText; | ||||
|  | ||||
| @end | ||||
|  | ||||
| @implementation FLEXWebViewController | ||||
|  | ||||
| - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { | ||||
|     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; | ||||
|     if (self) { | ||||
|         WKWebViewConfiguration *configuration = [WKWebViewConfiguration new]; | ||||
|  | ||||
|         if (@available(iOS 10.0, *)) { | ||||
|             configuration.dataDetectorTypes = WKDataDetectorTypeLink; | ||||
|         } | ||||
|  | ||||
|         self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration]; | ||||
|         self.webView.navigationDelegate = self; | ||||
|     } | ||||
|     return self; | ||||
| } | ||||
|  | ||||
| - (id)initWithText:(NSString *)text { | ||||
|     self = [self initWithNibName:nil bundle:nil]; | ||||
|     if (self) { | ||||
|         self.originalText = text; | ||||
|  | ||||
|         NSString *html = @"<head><style>:root{ color-scheme: light dark; }</style>" | ||||
|             "<meta name='viewport' content='initial-scale=1.0'></head><body><pre>%@</pre></body>"; | ||||
|  | ||||
|         // Loading message for when input text takes a long time to escape | ||||
|         NSString *loadingMessage = [NSString stringWithFormat:html, @"Loading..."]; | ||||
|         [self.webView loadHTMLString:loadingMessage baseURL:nil]; | ||||
|  | ||||
|         // Escape HTML on a background thread | ||||
|         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ | ||||
|             NSString *escapedText = [FLEXUtility stringByEscapingHTMLEntitiesInString:text]; | ||||
|             NSString *htmlString = [NSString stringWithFormat:html, escapedText]; | ||||
|  | ||||
|             // Update webview on the main thread | ||||
|             dispatch_async(dispatch_get_main_queue(), ^{ | ||||
|                 [self.webView loadHTMLString:htmlString baseURL:nil]; | ||||
|             }); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     return self; | ||||
| } | ||||
|  | ||||
| - (id)initWithURL:(NSURL *)url { | ||||
|     self = [self initWithNibName:nil bundle:nil]; | ||||
|     if (self) { | ||||
|         NSURLRequest *request = [NSURLRequest requestWithURL:url]; | ||||
|         [self.webView loadRequest:request]; | ||||
|     } | ||||
|  | ||||
|     return self; | ||||
| } | ||||
|  | ||||
| - (void)viewDidLoad { | ||||
|     [super viewDidLoad]; | ||||
|      | ||||
|     [self.view addSubview:self.webView]; | ||||
|     self.webView.frame = self.view.bounds; | ||||
|     self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; | ||||
|      | ||||
|     if (self.originalText.length > 0) { | ||||
|         self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] | ||||
|             initWithTitle:@"Copy" style:UIBarButtonItemStylePlain target:self action:@selector(copyButtonTapped:) | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
|  | ||||
| - (void)copyButtonTapped:(id)sender { | ||||
|     [UIPasteboard.generalPasteboard setString:self.originalText]; | ||||
| } | ||||
|  | ||||
|  | ||||
| #pragma mark - WKWebView Delegate | ||||
|  | ||||
| - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction | ||||
|                                                      decisionHandler:(void (^)(WKNavigationActionPolicy))handler { | ||||
|     WKNavigationActionPolicy policy = WKNavigationActionPolicyCancel; | ||||
|     if (navigationAction.navigationType == WKNavigationTypeOther) { | ||||
|         // Allow the initial load | ||||
|         policy = WKNavigationActionPolicyAllow; | ||||
|     } else { | ||||
|         // For clicked links, push another web view controller onto the navigation stack | ||||
|         // so that hitting the back button works as expected. | ||||
|         // Don't allow the current web view to handle the navigation. | ||||
|         NSURLRequest *request = navigationAction.request; | ||||
|         FLEXWebViewController *webVC = [[[self class] alloc] initWithURL:request.URL]; | ||||
|         webVC.title = request.URL.absoluteString; | ||||
|         [self.navigationController pushViewController:webVC animated:YES]; | ||||
|     } | ||||
|  | ||||
|     handler(policy); | ||||
| } | ||||
|  | ||||
|  | ||||
| #pragma mark - Class Helpers | ||||
|  | ||||
| + (BOOL)supportsPathExtension:(NSString *)extension { | ||||
|     BOOL supported = NO; | ||||
|     NSSet<NSString *> *supportedExtensions = [self webViewSupportedPathExtensions]; | ||||
|     if ([supportedExtensions containsObject:extension.lowercaseString]) { | ||||
|         supported = YES; | ||||
|     } | ||||
|     return supported; | ||||
| } | ||||
|  | ||||
| + (NSSet<NSString *> *)webViewSupportedPathExtensions { | ||||
|     static NSSet<NSString *> *pathExtensions = nil; | ||||
|     static dispatch_once_t onceToken; | ||||
|     dispatch_once(&onceToken, ^{ | ||||
|         // Note that this is not exhaustive, but all these extensions should work well in the web view. | ||||
|         // See https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html#//apple_ref/doc/uid/TP40006482-SW7 | ||||
|         pathExtensions = [NSSet<NSString *> setWithArray:@[ | ||||
|             @"jpg", @"jpeg", @"png", @"gif", @"pdf", @"svg", @"tiff", @"3gp", @"3gpp", @"3g2", | ||||
|             @"3gp2", @"aiff", @"aif", @"aifc", @"cdda", @"amr", @"mp3", @"swa", @"mp4", @"mpeg", | ||||
|             @"mpg", @"mp3", @"wav", @"bwf", @"m4a", @"m4b", @"m4p", @"mov", @"qt", @"mqv", @"m4v" | ||||
|         ]]; | ||||
|          | ||||
|     }); | ||||
|  | ||||
|     return pathExtensions; | ||||
| } | ||||
|  | ||||
| @end | ||||
		Reference in New Issue
	
	Block a user
	 Balackburn
					Balackburn