Module: ProMotion::WebScreenModule

Included in:
WebScreen
Defined in:
lib/ProMotion/web/web_screen_module.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#detector_typesObject

Returns the value of attribute detector_types.



4
5
6
# File 'lib/ProMotion/web/web_screen_module.rb', line 4

def detector_types
  @detector_types
end

Returns the value of attribute external_links.



4
5
6
# File 'lib/ProMotion/web/web_screen_module.rb', line 4

def external_links
  @external_links
end

#scale_to_fitObject

Returns the value of attribute scale_to_fit.



4
5
6
# File 'lib/ProMotion/web/web_screen_module.rb', line 4

def scale_to_fit
  @scale_to_fit
end

#webviewObject

Returns the value of attribute webview.



4
5
6
# File 'lib/ProMotion/web/web_screen_module.rb', line 4

def webview
  @webview
end

Instance Method Details

#backObject



97
# File 'lib/ProMotion/web/web_screen_module.rb', line 97

def back; web.goBack if can_go_back; end

#can_go_backObject

Navigation



95
# File 'lib/ProMotion/web/web_screen_module.rb', line 95

def can_go_back; web.canGoBack; end

#can_go_forwardObject



96
# File 'lib/ProMotion/web/web_screen_module.rb', line 96

def can_go_forward; web.canGoForward; end

#check_content_dataObject



78
79
80
# File 'lib/ProMotion/web/web_screen_module.rb', line 78

def check_content_data
  PM.logger.error "Missing #content method in WebScreen #{self.class.to_s}." unless self.respond_to?(:content)
end

#convert_retina_images(content) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/ProMotion/web/web_screen_module.rb', line 61

def convert_retina_images(content)
  #Convert images over to retina if the images exist.
  if UIScreen.mainScreen.bounds.respondsToSelector('displayLinkWithTarget:selector:') && UIScreen.mainScreen.bounds.scale == 2.0 # Thanks BubbleWrap! https://github.com/rubymotion/BubbleWrap/blob/master/motion/core/device/ios/screen.rb#L9
    content.gsub!(/src=['"](.*?)\.(jpg|gif|png)['"]/) do |img|
      if File.exists?(File.join(NSBundle.mainBundle.resourcePath, "#{$1}@2x.#{$2}"))
        # Create a UIImage to get the width and height of hte @2x image
        tmp_image = UIImage.imageNamed("/#{$1}@2x.#{$2}")
        new_width = tmp_image.size.width / 2
        new_height = tmp_image.size.height / 2

        img = "src=\"#{$1}@2x.#{$2}\" width=\"#{new_width}\" height=\"#{new_height}\""
      end
    end
  end
  content
end

#current_urlObject



90
91
92
# File 'lib/ProMotion/web/web_screen_module.rb', line 90

def current_url
  evaluate('document.URL')
end

#evaluate(js) ⇒ Object



86
87
88
# File 'lib/ProMotion/web/web_screen_module.rb', line 86

def evaluate(js)
  self.webview.stringByEvaluatingJavaScriptFromString(js)
end

#forwardObject



98
# File 'lib/ProMotion/web/web_screen_module.rb', line 98

def forward; web.goForward if can_go_forward; end

#htmlObject



82
83
84
# File 'lib/ProMotion/web/web_screen_module.rb', line 82

def html
  evaluate("document.documentElement.outerHTML")
end

#on_initObject



16
17
18
# File 'lib/ProMotion/web/web_screen_module.rb', line 16

def on_init
  # TODO: Remove in 3.0
end

#open_in_chrome(in_request) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/ProMotion/web/web_screen_module.rb', line 103

def open_in_chrome(in_request)
  # Add pod 'OpenInChrome' to your Rakefile if you want links to open in Google Chrome for users.
  # This will fall back to Safari if the user doesn't have Chrome installed.
  chrome_controller = OpenInChromeController.sharedInstance
  return open_in_safari(in_request) unless chrome_controller.isChromeInstalled
  chrome_controller.openInChrome(in_request.URL)
end

#open_in_safari(in_request) ⇒ Object



111
112
113
114
# File 'lib/ProMotion/web/web_screen_module.rb', line 111

def open_in_safari(in_request)
  # Open UIWebView delegate links in Safari.
  UIApplication.sharedApplication.openURL(in_request.URL)
end

#open_url(url) ⇒ Object



54
55
56
57
58
59
# File 'lib/ProMotion/web/web_screen_module.rb', line 54

def open_url(url)
  request = NSURLRequest.requestWithURL(
    url.is_a?(NSURL) ? url : NSURL.URLWithString(url)
  )
  web.loadRequest request
end

#refreshObject Also known as: reload



99
# File 'lib/ProMotion/web/web_screen_module.rb', line 99

def refresh; web.reload; end

#screen_setupObject



6
7
8
9
10
11
12
13
14
# File 'lib/ProMotion/web/web_screen_module.rb', line 6

def screen_setup
  check_content_data
  self.external_links ||= false
  self.scale_to_fit ||= false
  self.detector_types ||= :none

  web_view_setup
  set_initial_content
end

#set_content(content) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ProMotion/web/web_screen_module.rb', line 40

def set_content(content)
  content_path = File.join(NSBundle.mainBundle.resourcePath, content)

  if File.exists? content_path
    content_string = File.read content_path
    content_base_url = NSURL.fileURLWithPath NSBundle.mainBundle.resourcePath

    self.web.loadHTMLString(convert_retina_images(content_string), baseURL:content_base_url)
  else
    # We assume the user wants to load an arbitrary string into the web view
    self.web.loadHTMLString(content, baseURL:nil)
  end
end

#set_initial_contentObject



35
36
37
38
# File 'lib/ProMotion/web/web_screen_module.rb', line 35

def set_initial_content
  return unless self.respond_to?(:content) && self.content
  self.content.is_a?(NSURL) ? open_url(self.content) : set_content(self.content)
end

#stopObject



100
# File 'lib/ProMotion/web/web_screen_module.rb', line 100

def stop; web.stopLoading; end

#webObject



31
32
33
# File 'lib/ProMotion/web/web_screen_module.rb', line 31

def web
  self.webview
end

#web_view_setupObject



20
21
22
23
24
25
26
27
28
29
# File 'lib/ProMotion/web/web_screen_module.rb', line 20

def web_view_setup
  self.webview ||= add UIWebView.new, {
    frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height),
    delegate: self,
    data_detector_types: data_detector_types
  }
  self.webview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
  self.webview.scalesPageToFit = self.scale_to_fit
  self.webview.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal
end

#webView(webView, didFailLoadWithError: error) ⇒ Object

UIWebViewDelegate Methods - Camelcase



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/ProMotion/web/web_screen_module.rb', line 117

def webView(in_web, shouldStartLoadWithRequest:in_request, navigationType:in_type)
  if %w(http https).include?(in_request.URL.scheme)
    if self.external_links == true && in_type == UIWebViewNavigationTypeLinkClicked
      if defined?(OpenInChromeController)
        open_in_chrome in_request
      else
        open_in_safari in_request
      end
      return false # don't allow the web view to load the link.
    end
  end

  load_request_enable = true #return true on default for local file loading.
  load_request_enable = !!on_request(in_request, in_type) if self.respond_to?(:on_request)
  load_request_enable
end

#webViewDidFinishLoad(webView) ⇒ Object



138
139
140
# File 'lib/ProMotion/web/web_screen_module.rb', line 138

def webViewDidFinishLoad(webView)
  load_finished if self.respond_to?(:load_finished)
end

#webViewDidStartLoad(webView) ⇒ Object



134
135
136
# File 'lib/ProMotion/web/web_screen_module.rb', line 134

def webViewDidStartLoad(webView)
  load_started if self.respond_to?(:load_started)
end