|  | @@ -3,16 +3,18 @@
 | 
	
		
			
			| 3 | 3 |  import { Dimensions, Platform } from 'react-native';
 | 
	
		
			
			| 4 | 4 |  
 | 
	
		
			
			| 5 | 5 |  const domMutationObserveScript = `
 | 
	
		
			
			| 6 |  | -var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
 | 
	
		
			
			| 7 |  | -var observer = new MutationObserver(updateSize);
 | 
	
		
			
			| 8 |  | -observer.observe(document, {
 | 
	
		
			
			|  | 6 | +  var MutationObserver =
 | 
	
		
			
			|  | 7 | +    window.MutationObserver || window.WebKitMutationObserver;
 | 
	
		
			
			|  | 8 | +  var observer = new MutationObserver(updateSize);
 | 
	
		
			
			|  | 9 | +  observer.observe(document, {
 | 
	
		
			
			| 9 | 10 |      subtree: true,
 | 
	
		
			
			| 10 | 11 |      attributes: true
 | 
	
		
			
			| 11 |  | -});
 | 
	
		
			
			|  | 12 | +  });
 | 
	
		
			
			| 12 | 13 |  `;
 | 
	
		
			
			| 13 | 14 |  
 | 
	
		
			
			| 14 |  | -const updateSizeWithMessage = element =>
 | 
	
		
			
			|  | 15 | +const updateSizeWithMessage = (element, scalesPageToFit) =>
 | 
	
		
			
			| 15 | 16 |    `
 | 
	
		
			
			|  | 17 | +  var scale = ${scalesPageToFit ? 'screen.width / window.innerWidth' : '1'};
 | 
	
		
			
			| 16 | 18 |    var lastHeight = 0;
 | 
	
		
			
			| 17 | 19 |    var heightTheSameTimes = 0;
 | 
	
		
			
			| 18 | 20 |    var maxHeightTheSameTimes = 5;
 | 
	
	
		
			
			|  | @@ -29,7 +31,8 @@ const updateSizeWithMessage = element =>
 | 
	
		
			
			| 29 | 31 |      }
 | 
	
		
			
			| 30 | 32 |      height = ${element}.offsetHeight || document.documentElement.offsetHeight;
 | 
	
		
			
			| 31 | 33 |      width = ${element}.offsetWidth || document.documentElement.offsetWidth;
 | 
	
		
			
			| 32 |  | -    window.ReactNativeWebView.postMessage(JSON.stringify({ width: width, height: height }));
 | 
	
		
			
			|  | 34 | +    var needScale = width > screen.width;
 | 
	
		
			
			|  | 35 | +    window.ReactNativeWebView.postMessage(JSON.stringify({ width: needScale ? width * scale : width, height: needScale ? height * scale : height }));
 | 
	
		
			
			| 33 | 36 |  
 | 
	
		
			
			| 34 | 37 |      // Make additional height checks (required to fix issues wit twitter embeds)
 | 
	
		
			
			| 35 | 38 |      clearTimeout(forceRefreshTimeout);
 | 
	
	
		
			
			|  | @@ -51,15 +54,17 @@ const updateSizeWithMessage = element =>
 | 
	
		
			
			| 51 | 54 |    `;
 | 
	
		
			
			| 52 | 55 |  
 | 
	
		
			
			| 53 | 56 |  // add viewport setting to meta
 | 
	
		
			
			| 54 |  | -const makeScalePageToFit = zoomable => `
 | 
	
		
			
			| 55 |  | -var meta = document.createElement('meta'); 
 | 
	
		
			
			| 56 |  | -meta.setAttribute('name', 'viewport'); 
 | 
	
		
			
			| 57 |  | -meta.setAttribute('content', 'width=device-width, user-scalable=${
 | 
	
		
			
			| 58 |  | -  zoomable ? 'yes' : 'no'
 | 
	
		
			
			| 59 |  | -}'); document.getElementsByTagName('head')[0].appendChild(meta);
 | 
	
		
			
			|  | 57 | +const makeScalePageToFit = (zoomable, scalesPageToFit) =>
 | 
	
		
			
			|  | 58 | +  scalesPageToFit || Platform.OS === 'android'
 | 
	
		
			
			|  | 59 | +    ? ''
 | 
	
		
			
			|  | 60 | +    : `
 | 
	
		
			
			|  | 61 | +  var meta = document.createElement("meta");
 | 
	
		
			
			|  | 62 | +  meta.setAttribute("name", "viewport");
 | 
	
		
			
			|  | 63 | +  meta.setAttribute("content", "width=device-width, user-scalable=${zoomable ? 'yes' : 'no'}");
 | 
	
		
			
			|  | 64 | +  document.getElementsByTagName("head")[0].appendChild(meta);
 | 
	
		
			
			| 60 | 65 |  `;
 | 
	
		
			
			| 61 | 66 |  
 | 
	
		
			
			| 62 |  | -const getBaseScript = ({ style, zoomable }) =>
 | 
	
		
			
			|  | 67 | +const getBaseScript = ({ style, zoomable, scalesPageToFit }) =>
 | 
	
		
			
			| 63 | 68 |    `
 | 
	
		
			
			| 64 | 69 |    ;
 | 
	
		
			
			| 65 | 70 |    if (!document.getElementById("rnahw-wrapper")) {
 | 
	
	
		
			
			|  | @@ -70,11 +75,11 @@ const getBaseScript = ({ style, zoomable }) =>
 | 
	
		
			
			| 70 | 75 |      }
 | 
	
		
			
			| 71 | 76 |      document.body.appendChild(wrapper);
 | 
	
		
			
			| 72 | 77 |    }
 | 
	
		
			
			| 73 |  | -  ${updateSizeWithMessage('wrapper')}
 | 
	
		
			
			|  | 78 | +  ${updateSizeWithMessage('wrapper', scalesPageToFit)}
 | 
	
		
			
			| 74 | 79 |    window.addEventListener('load', updateSize);
 | 
	
		
			
			| 75 | 80 |    window.addEventListener('resize', updateSize);
 | 
	
		
			
			| 76 | 81 |    ${domMutationObserveScript}
 | 
	
		
			
			| 77 |  | -  ${makeScalePageToFit(zoomable)}
 | 
	
		
			
			|  | 82 | +  ${makeScalePageToFit(zoomable, scalesPageToFit)}
 | 
	
		
			
			| 78 | 83 |    updateSize();
 | 
	
		
			
			| 79 | 84 |    `;
 | 
	
		
			
			| 80 | 85 |  
 | 
	
	
		
			
			|  | @@ -122,8 +127,8 @@ ${html}
 | 
	
		
			
			| 122 | 127 |  </script>
 | 
	
		
			
			| 123 | 128 |  `;
 | 
	
		
			
			| 124 | 129 |  
 | 
	
		
			
			| 125 |  | -const getScript = ({ files, customStyle, customScript, style, zoomable }) => {
 | 
	
		
			
			| 126 |  | -  let script = getBaseScript({ style, zoomable });
 | 
	
		
			
			|  | 130 | +const getScript = ({ files, customStyle, customScript, style, zoomable, scalesPageToFit }) => {
 | 
	
		
			
			|  | 131 | +  let script = getBaseScript({ style, zoomable, scalesPageToFit });
 | 
	
		
			
			| 127 | 132 |    script = files && files.length > 0 ? appendFilesToHead({ files, script }) : script;
 | 
	
		
			
			| 128 | 133 |    script = appendStylesToHead({ style: customStyle, script });
 | 
	
		
			
			| 129 | 134 |    customScript && (script = customScript + script);
 | 
	
	
		
			
			|  | @@ -146,7 +151,9 @@ export const reduceData = props => {
 | 
	
		
			
			| 146 | 151 |    const script = getScript(props);
 | 
	
		
			
			| 147 | 152 |    const { html, baseUrl } = source;
 | 
	
		
			
			| 148 | 153 |    if (html) {
 | 
	
		
			
			| 149 |  | -    return { currentSource: { baseUrl, html: getInjectedSource({ html, script }) } };
 | 
	
		
			
			|  | 154 | +    return {
 | 
	
		
			
			|  | 155 | +      currentSource: { baseUrl, html: getInjectedSource({ html, script }) }
 | 
	
		
			
			|  | 156 | +    };
 | 
	
		
			
			| 150 | 157 |    } else {
 | 
	
		
			
			| 151 | 158 |      return {
 | 
	
		
			
			| 152 | 159 |        currentSource: source,
 | 
	
	
		
			
			|  | @@ -162,7 +169,12 @@ export const shouldUpdate = ({ prevProps, nextProps }) => {
 | 
	
		
			
			| 162 | 169 |    for (const prop in nextProps) {
 | 
	
		
			
			| 163 | 170 |      if (nextProps[prop] !== prevProps[prop]) {
 | 
	
		
			
			| 164 | 171 |        if (typeof nextProps[prop] === 'object' && typeof prevProps[prop] === 'object') {
 | 
	
		
			
			| 165 |  | -        if (shouldUpdate({ prevProps: prevProps[prop], nextProps: nextProps[prop] })) {
 | 
	
		
			
			|  | 172 | +        if (
 | 
	
		
			
			|  | 173 | +          shouldUpdate({
 | 
	
		
			
			|  | 174 | +            prevProps: prevProps[prop],
 | 
	
		
			
			|  | 175 | +            nextProps: nextProps[prop]
 | 
	
		
			
			|  | 176 | +          })
 | 
	
		
			
			|  | 177 | +        ) {
 | 
	
		
			
			| 166 | 178 |            return true;
 | 
	
		
			
			| 167 | 179 |          }
 | 
	
		
			
			| 168 | 180 |        } else {
 |