Açıklama Yok

nsl.js 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. window.NSLPopup = function (url, title, w, h) {
  2. var userAgent = navigator.userAgent,
  3. mobile = function () {
  4. return /\b(iPhone|iP[ao]d)/.test(userAgent) ||
  5. /\b(iP[ao]d)/.test(userAgent) ||
  6. /Android/i.test(userAgent) ||
  7. /Mobile/i.test(userAgent);
  8. },
  9. screenX = window.screenX !== undefined ? window.screenX : window.screenLeft,
  10. screenY = window.screenY !== undefined ? window.screenY : window.screenTop,
  11. outerWidth = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth,
  12. outerHeight = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22,
  13. targetWidth = mobile() ? null : w,
  14. targetHeight = mobile() ? null : h,
  15. V = screenX < 0 ? window.screen.width + screenX : screenX,
  16. left = parseInt(V + (outerWidth - targetWidth) / 2, 10),
  17. right = parseInt(screenY + (outerHeight - targetHeight) / 2.5, 10),
  18. features = [];
  19. if (targetWidth !== null) {
  20. features.push('width=' + targetWidth);
  21. }
  22. if (targetHeight !== null) {
  23. features.push('height=' + targetHeight);
  24. }
  25. features.push('left=' + left);
  26. features.push('top=' + right);
  27. features.push('scrollbars=1');
  28. var newWindow = window.open(url, title, features.join(','));
  29. if (window.focus) {
  30. newWindow.focus();
  31. }
  32. return newWindow;
  33. };
  34. var isWebView = null;
  35. function checkWebView() {
  36. if (isWebView === null) {
  37. function _detectOS(ua) {
  38. if (/Android/.test(ua)) {
  39. return "Android";
  40. } else if (/iPhone|iPad|iPod/.test(ua)) {
  41. return "iOS";
  42. } else if (/Windows/.test(ua)) {
  43. return "Windows";
  44. } else if (/Mac OS X/.test(ua)) {
  45. return "Mac";
  46. } else if (/CrOS/.test(ua)) {
  47. return "Chrome OS";
  48. } else if (/Firefox/.test(ua)) {
  49. return "Firefox OS";
  50. }
  51. return "";
  52. }
  53. function _detectBrowser(ua) {
  54. var android = /Android/.test(ua);
  55. if (/Opera Mini/.test(ua) || / OPR/.test(ua) || / OPT/.test(ua)) {
  56. return "Opera";
  57. } else if (/CriOS/.test(ua)) {
  58. return "Chrome for iOS";
  59. } else if (/Edge/.test(ua)) {
  60. return "Edge";
  61. } else if (android && /Silk\//.test(ua)) {
  62. return "Silk";
  63. } else if (/Chrome/.test(ua)) {
  64. return "Chrome";
  65. } else if (/Firefox/.test(ua)) {
  66. return "Firefox";
  67. } else if (android) {
  68. return "AOSP";
  69. } else if (/MSIE|Trident/.test(ua)) {
  70. return "IE";
  71. } else if (/Safari\//.test(ua)) {
  72. return "Safari";
  73. } else if (/AppleWebKit/.test(ua)) {
  74. return "WebKit";
  75. }
  76. return "";
  77. }
  78. function _detectBrowserVersion(ua, browser) {
  79. if (browser === "Opera") {
  80. return /Opera Mini/.test(ua) ? _getVersion(ua, "Opera Mini/") :
  81. / OPR/.test(ua) ? _getVersion(ua, " OPR/") :
  82. _getVersion(ua, " OPT/");
  83. } else if (browser === "Chrome for iOS") {
  84. return _getVersion(ua, "CriOS/");
  85. } else if (browser === "Edge") {
  86. return _getVersion(ua, "Edge/");
  87. } else if (browser === "Chrome") {
  88. return _getVersion(ua, "Chrome/");
  89. } else if (browser === "Firefox") {
  90. return _getVersion(ua, "Firefox/");
  91. } else if (browser === "Silk") {
  92. return _getVersion(ua, "Silk/");
  93. } else if (browser === "AOSP") {
  94. return _getVersion(ua, "Version/");
  95. } else if (browser === "IE") {
  96. return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") :
  97. /MSIE/.test(ua) ? _getVersion(ua, "MSIE ")
  98. :
  99. _getVersion(ua, "rv:");
  100. } else if (browser === "Safari") {
  101. return _getVersion(ua, "Version/");
  102. } else if (browser === "WebKit") {
  103. return _getVersion(ua, "WebKit/");
  104. }
  105. return "0.0.0";
  106. }
  107. function _getVersion(ua, token) {
  108. try {
  109. return _normalizeSemverString(ua.split(token)[1].trim().split(/[^\w\.]/)[0]);
  110. } catch (o_O) {
  111. }
  112. return "0.0.0";
  113. }
  114. function _normalizeSemverString(version) {
  115. var ary = version.split(/[\._]/);
  116. return (parseInt(ary[0], 10) || 0) + "." +
  117. (parseInt(ary[1], 10) || 0) + "." +
  118. (parseInt(ary[2], 10) || 0);
  119. }
  120. function _isWebView(ua, os, browser, version, options) {
  121. switch (os + browser) {
  122. case "iOSSafari":
  123. return false;
  124. case "iOSWebKit":
  125. return _isWebView_iOS(options);
  126. case "AndroidAOSP":
  127. return false;
  128. case "AndroidChrome":
  129. return parseFloat(version) >= 42 ? /; wv/.test(ua) : /\d{2}\.0\.0/.test(version) ? true : _isWebView_Android(options);
  130. }
  131. return false;
  132. }
  133. function _isWebView_iOS(options) {
  134. var document = (window["document"] || {});
  135. if ("WEB_VIEW" in options) {
  136. return options["WEB_VIEW"];
  137. }
  138. return !("fullscreenEnabled" in document || "webkitFullscreenEnabled" in document || false);
  139. }
  140. function _isWebView_Android(options) {
  141. if ("WEB_VIEW" in options) {
  142. return options["WEB_VIEW"];
  143. }
  144. return !("requestFileSystem" in window || "webkitRequestFileSystem" in window || false);
  145. }
  146. var options = {};
  147. var nav = window.navigator || {};
  148. var ua = nav.userAgent || "";
  149. var os = _detectOS(ua);
  150. var browser = _detectBrowser(ua);
  151. var browserVersion = _detectBrowserVersion(ua, browser);
  152. isWebView = _isWebView(ua, os, browser, browserVersion, options);
  153. }
  154. return isWebView;
  155. }
  156. function isAllowedWebViewForUserAgent(provider) {
  157. var googleAllowedWebViews = [
  158. 'Instagram',
  159. 'FBAV',
  160. 'FBAN',
  161. 'Line',
  162. ], facebookAllowedWebViews = [
  163. 'Instagram',
  164. 'FBAV',
  165. 'FBAN'
  166. ], whitelist = [];
  167. switch (provider) {
  168. case 'facebook':
  169. whitelist = facebookAllowedWebViews;
  170. break;
  171. case 'google':
  172. whitelist = googleAllowedWebViews;
  173. break;
  174. }
  175. var nav = window.navigator || {};
  176. var ua = nav.userAgent || "";
  177. if (whitelist.length && ua.match(new RegExp(whitelist.join('|')))) {
  178. return true;
  179. }
  180. return false;
  181. }
  182. window._nslDOMReady(function () {
  183. window.nslRedirect = function (url) {
  184. if (_redirectOverlay) {
  185. var overlay = document.createElement('div');
  186. overlay.id = "nsl-redirect-overlay";
  187. var overlayHTML = '',
  188. overlayContainer = "<div id='nsl-redirect-overlay-container'>",
  189. overlayContainerClose = "</div>",
  190. overlaySpinner = "<div id='nsl-redirect-overlay-spinner'></div>",
  191. overlayTitle = "<p id='nsl-redirect-overlay-title'>" + _localizedStrings.redirect_overlay_title + "</p>",
  192. overlayText = "<p id='nsl-redirect-overlay-text'>" + _localizedStrings.redirect_overlay_text + "</p>";
  193. switch (_redirectOverlay) {
  194. case "overlay-only":
  195. break;
  196. case "overlay-with-spinner":
  197. overlayHTML = overlayContainer + overlaySpinner + overlayContainerClose;
  198. break;
  199. default:
  200. overlayHTML = overlayContainer + overlaySpinner + overlayTitle + overlayText + overlayContainerClose;
  201. break;
  202. }
  203. overlay.insertAdjacentHTML("afterbegin", overlayHTML);
  204. document.body.appendChild(overlay);
  205. }
  206. window.location = url;
  207. };
  208. var targetWindow = _targetWindow || 'prefer-popup',
  209. lastPopup = false;
  210. var buttonLinks = document.querySelectorAll(' a[data-plugin="nsl"][data-action="connect"], a[data-plugin="nsl"][data-action="link"]');
  211. buttonLinks.forEach(function (buttonLink) {
  212. buttonLink.addEventListener('click', function (e) {
  213. if (lastPopup && !lastPopup.closed) {
  214. e.preventDefault();
  215. lastPopup.focus();
  216. } else {
  217. var href = this.href,
  218. success = false;
  219. if (href.indexOf('?') !== -1) {
  220. href += '&';
  221. } else {
  222. href += '?';
  223. }
  224. var redirectTo = this.dataset.redirect;
  225. if (redirectTo === 'current') {
  226. href += 'redirect=' + encodeURIComponent(window.location.href) + '&';
  227. } else if (redirectTo && redirectTo !== '') {
  228. href += 'redirect=' + encodeURIComponent(redirectTo) + '&';
  229. }
  230. if (targetWindow !== 'prefer-same-window' && checkWebView()) {
  231. targetWindow = 'prefer-same-window';
  232. }
  233. if (targetWindow === 'prefer-popup') {
  234. lastPopup = NSLPopup(href + 'display=popup', 'nsl-social-connect', this.dataset.popupwidth, this.dataset.popupheight);
  235. if (lastPopup) {
  236. success = true;
  237. e.preventDefault();
  238. }
  239. } else if (targetWindow === 'prefer-new-tab') {
  240. var newTab = window.open(href + 'display=popup', '_blank');
  241. if (newTab) {
  242. if (window.focus) {
  243. newTab.focus();
  244. }
  245. success = true;
  246. e.preventDefault();
  247. }
  248. }
  249. if (!success) {
  250. window.location = href;
  251. e.preventDefault();
  252. }
  253. }
  254. });
  255. });
  256. var googleLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="google"]');
  257. if (googleLoginButtons.length && checkWebView() && !isAllowedWebViewForUserAgent('google')) {
  258. googleLoginButtons.forEach(function (googleLoginButton) {
  259. googleLoginButton.remove();
  260. });
  261. }
  262. var facebookLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="facebook"]');
  263. if (facebookLoginButtons.length && checkWebView() && /Android/.test(window.navigator.userAgent) && !isAllowedWebViewForUserAgent('facebook')) {
  264. facebookLoginButtons.forEach(function (facebookLoginButton) {
  265. facebookLoginButton.remove();
  266. });
  267. }
  268. });