From 8e8168b7bbc80f22fd1f27a9065608cb9e1b82b9 Mon Sep 17 00:00:00 2001 From: Will Raxworthy Date: Mon, 22 Sep 2014 11:09:11 +1000 Subject: [PATCH] Split out webview modules. --- lib/ProMotion/web/ui_web_screen_module.rb | 46 ++++++++++++++++++++++ lib/ProMotion/web/web_screen_module.rb | 44 ++------------------- lib/ProMotion/web/wk_web_screen_module.rb | 47 +++++++++++++++++++++++ 3 files changed, 96 insertions(+), 41 deletions(-) create mode 100644 lib/ProMotion/web/ui_web_screen_module.rb create mode 100644 lib/ProMotion/web/wk_web_screen_module.rb diff --git a/lib/ProMotion/web/ui_web_screen_module.rb b/lib/ProMotion/web/ui_web_screen_module.rb new file mode 100644 index 00000000..a9b7941b --- /dev/null +++ b/lib/ProMotion/web/ui_web_screen_module.rb @@ -0,0 +1,46 @@ +module ProMotion + module UIWebScreenModule + def build_web_view + self.webview = add UIWebView.new, { + frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height), + delegate: self, + data_detector_types: self.detector_types + } + + self.webview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight + self.webview.scalesPageToFit = self.scale_to_fit + self.webview.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal + end + + def evaluate(js) + self.webview.stringByEvaluatingJavaScriptFromString(js) + end + + def webView(inWeb, shouldStartLoadWithRequest:inRequest, navigationType:inType) + if self.external_links == true && inType == UIWebViewNavigationTypeLinkClicked + if defined?(OpenInChromeController) + open_in_chrome inRequest + else + open_in_safari inRequest + end + return false #don't allow the web view to load the link. + end + + load_request_enable = true #return true on default for local file loading. + load_request_enable = !!on_request(inRequest, inType) if self.respond_to?(:on_request) + load_request_enable + end + + def webViewDidStartLoad(webView) + load_started if self.respond_to?(:load_started) + end + + def webViewDidFinishLoad(webView) + load_finished if self.respond_to?(:load_finished) + end + + def webView(webView, didFailLoadWithError:error) + load_failed(error) if self.respond_to?("load_failed:") + end + end +end diff --git a/lib/ProMotion/web/web_screen_module.rb b/lib/ProMotion/web/web_screen_module.rb index 7b3afb9f..56ab80b5 100644 --- a/lib/ProMotion/web/web_screen_module.rb +++ b/lib/ProMotion/web/web_screen_module.rb @@ -1,5 +1,7 @@ module ProMotion module WebScreenModule + include WKWebScreenModule if defined?(WKWebView) + include UIWebScreenModule unless defined?(WKWebView) attr_accessor :webview, :external_links, :detector_types, :scale_to_fit @@ -19,14 +21,7 @@ def on_init self.detector_types = map_detector_symbol(self.detector_types) end - self.webview ||= add UIWebView.new, { - frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height), - delegate: self, - data_detector_types: self.detector_types - } - self.webview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight - self.webview.scalesPageToFit = self.scale_to_fit - self.webview.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal + build_web_view set_initial_content end @@ -85,10 +80,6 @@ def html evaluate("document.documentElement.outerHTML") end - def evaluate(js) - self.webview.stringByEvaluatingJavaScriptFromString(js) - end - def current_url evaluate('document.URL') end @@ -115,34 +106,6 @@ def open_in_safari(inRequest) UIApplication.sharedApplication.openURL(inRequest.URL) end - # UIWebViewDelegate Methods - Camelcase - def webView(inWeb, shouldStartLoadWithRequest:inRequest, navigationType:inType) - if self.external_links == true && inType == UIWebViewNavigationTypeLinkClicked - if defined?(OpenInChromeController) - open_in_chrome inRequest - else - open_in_safari inRequest - end - return false #don't allow the web view to load the link. - end - - load_request_enable = true #return true on default for local file loading. - load_request_enable = !!on_request(inRequest, inType) if self.respond_to?(:on_request) - load_request_enable - end - - def webViewDidStartLoad(webView) - load_started if self.respond_to?(:load_started) - end - - def webViewDidFinishLoad(webView) - load_finished if self.respond_to?(:load_finished) - end - - def webView(webView, didFailLoadWithError:error) - load_failed(error) if self.respond_to?("load_failed:") - end - protected def map_detector_symbol(symbol) @@ -154,6 +117,5 @@ def map_detector_symbol(symbol) all: UIDataDetectorTypeAll }[symbol] || UIDataDetectorTypeNone end - end end diff --git a/lib/ProMotion/web/wk_web_screen_module.rb b/lib/ProMotion/web/wk_web_screen_module.rb new file mode 100644 index 00000000..cf9ad1af --- /dev/null +++ b/lib/ProMotion/web/wk_web_screen_module.rb @@ -0,0 +1,47 @@ +module ProMotion + module WKWebScreenModule + def build_web_view + self.webview = add WKWebView.new, { + frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height), + data_detector_types: self.detector_types + } + + self.webview.UIDelegate = self + self.webview.navigationDelegate = self + self.webview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight + self.webview.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal + end + + def webView(view, didCommitNavigation: navigation) + navigation_started(navigation) if self.respond_to?("navigation_started") + end + + def webView(view, didFailNavigation: navigation, withError: error) + navigation_failed(navigation, error) if self.respond_to?("navigation_failed") + end + + def webView(view, didFinishNavigation: navigation) + navigation_finished(navigation) if self.respond_to?("navigation_finished") + end + + def evaluate(js, &block) + self.webview.evaluateJavaScript(js, completionHandler: -> (result, error) { + unless block.nil? + block.call(result, error) + end + }) + end + + def go_to_item(item) + self.webview.goToBackForwardListItem(item) + end + + def back_forward_list + self.webview.backForwardList + end + + def progress + self.webview.estimatedProgress + end + end +end