| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- window.NSLPopup = function (url, title, w, h) {
- var userAgent = navigator.userAgent,
- mobile = function () {
- return /\b(iPhone|iP[ao]d)/.test(userAgent) ||
- /\b(iP[ao]d)/.test(userAgent) ||
- /Android/i.test(userAgent) ||
- /Mobile/i.test(userAgent);
- },
- screenX = window.screenX !== undefined ? window.screenX : window.screenLeft,
- screenY = window.screenY !== undefined ? window.screenY : window.screenTop,
- outerWidth = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth,
- outerHeight = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22,
- targetWidth = mobile() ? null : w,
- targetHeight = mobile() ? null : h,
- V = screenX < 0 ? window.screen.width + screenX : screenX,
- left = parseInt(V + (outerWidth - targetWidth) / 2, 10),
- right = parseInt(screenY + (outerHeight - targetHeight) / 2.5, 10),
- features = [];
- if (targetWidth !== null) {
- features.push('width=' + targetWidth);
- }
- if (targetHeight !== null) {
- features.push('height=' + targetHeight);
- }
- features.push('left=' + left);
- features.push('top=' + right);
- features.push('scrollbars=1');
- var newWindow = window.open(url, title, features.join(','));
- if (window.focus) {
- newWindow.focus();
- }
- return newWindow;
- };
- var isWebView = null;
- function checkWebView() {
- if (isWebView === null) {
- function _detectOS(ua) {
- if (/Android/.test(ua)) {
- return "Android";
- } else if (/iPhone|iPad|iPod/.test(ua)) {
- return "iOS";
- } else if (/Windows/.test(ua)) {
- return "Windows";
- } else if (/Mac OS X/.test(ua)) {
- return "Mac";
- } else if (/CrOS/.test(ua)) {
- return "Chrome OS";
- } else if (/Firefox/.test(ua)) {
- return "Firefox OS";
- }
- return "";
- }
- function _detectBrowser(ua) {
- var android = /Android/.test(ua);
- if (/Opera Mini/.test(ua) || / OPR/.test(ua) || / OPT/.test(ua)) {
- return "Opera";
- } else if (/CriOS/.test(ua)) {
- return "Chrome for iOS";
- } else if (/Edge/.test(ua)) {
- return "Edge";
- } else if (android && /Silk\//.test(ua)) {
- return "Silk";
- } else if (/Chrome/.test(ua)) {
- return "Chrome";
- } else if (/Firefox/.test(ua)) {
- return "Firefox";
- } else if (android) {
- return "AOSP";
- } else if (/MSIE|Trident/.test(ua)) {
- return "IE";
- } else if (/Safari\//.test(ua)) {
- return "Safari";
- } else if (/AppleWebKit/.test(ua)) {
- return "WebKit";
- }
- return "";
- }
- function _detectBrowserVersion(ua, browser) {
- if (browser === "Opera") {
- return /Opera Mini/.test(ua) ? _getVersion(ua, "Opera Mini/") :
- / OPR/.test(ua) ? _getVersion(ua, " OPR/") :
- _getVersion(ua, " OPT/");
- } else if (browser === "Chrome for iOS") {
- return _getVersion(ua, "CriOS/");
- } else if (browser === "Edge") {
- return _getVersion(ua, "Edge/");
- } else if (browser === "Chrome") {
- return _getVersion(ua, "Chrome/");
- } else if (browser === "Firefox") {
- return _getVersion(ua, "Firefox/");
- } else if (browser === "Silk") {
- return _getVersion(ua, "Silk/");
- } else if (browser === "AOSP") {
- return _getVersion(ua, "Version/");
- } else if (browser === "IE") {
- return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") :
- /MSIE/.test(ua) ? _getVersion(ua, "MSIE ")
- :
- _getVersion(ua, "rv:");
- } else if (browser === "Safari") {
- return _getVersion(ua, "Version/");
- } else if (browser === "WebKit") {
- return _getVersion(ua, "WebKit/");
- }
- return "0.0.0";
- }
- function _getVersion(ua, token) {
- try {
- return _normalizeSemverString(ua.split(token)[1].trim().split(/[^\w\.]/)[0]);
- } catch (o_O) {
- }
- return "0.0.0";
- }
- function _normalizeSemverString(version) {
- var ary = version.split(/[\._]/);
- return (parseInt(ary[0], 10) || 0) + "." +
- (parseInt(ary[1], 10) || 0) + "." +
- (parseInt(ary[2], 10) || 0);
- }
- function _isWebView(ua, os, browser, version, options) {
- switch (os + browser) {
- case "iOSSafari":
- return false;
- case "iOSWebKit":
- return _isWebView_iOS(options);
- case "AndroidAOSP":
- return false;
- case "AndroidChrome":
- return parseFloat(version) >= 42 ? /; wv/.test(ua) : /\d{2}\.0\.0/.test(version) ? true : _isWebView_Android(options);
- }
- return false;
- }
- function _isWebView_iOS(options) {
- var document = (window["document"] || {});
- if ("WEB_VIEW" in options) {
- return options["WEB_VIEW"];
- }
- return !("fullscreenEnabled" in document || "webkitFullscreenEnabled" in document || false);
- }
- function _isWebView_Android(options) {
- if ("WEB_VIEW" in options) {
- return options["WEB_VIEW"];
- }
- return !("requestFileSystem" in window || "webkitRequestFileSystem" in window || false);
- }
- var options = {};
- var nav = window.navigator || {};
- var ua = nav.userAgent || "";
- var os = _detectOS(ua);
- var browser = _detectBrowser(ua);
- var browserVersion = _detectBrowserVersion(ua, browser);
- isWebView = _isWebView(ua, os, browser, browserVersion, options);
- }
- return isWebView;
- }
- function isAllowedWebViewForUserAgent(provider) {
- var googleAllowedWebViews = [
- 'Instagram',
- 'FBAV',
- 'FBAN',
- 'Line',
- ], facebookAllowedWebViews = [
- 'Instagram',
- 'FBAV',
- 'FBAN'
- ], whitelist = [];
- switch (provider) {
- case 'facebook':
- whitelist = facebookAllowedWebViews;
- break;
- case 'google':
- whitelist = googleAllowedWebViews;
- break;
- }
- var nav = window.navigator || {};
- var ua = nav.userAgent || "";
- if (whitelist.length && ua.match(new RegExp(whitelist.join('|')))) {
- return true;
- }
- return false;
- }
- window._nslDOMReady(function () {
- window.nslRedirect = function (url) {
- if (_redirectOverlay) {
- var overlay = document.createElement('div');
- overlay.id = "nsl-redirect-overlay";
- var overlayHTML = '',
- overlayContainer = "<div id='nsl-redirect-overlay-container'>",
- overlayContainerClose = "</div>",
- overlaySpinner = "<div id='nsl-redirect-overlay-spinner'></div>",
- overlayTitle = "<p id='nsl-redirect-overlay-title'>" + _localizedStrings.redirect_overlay_title + "</p>",
- overlayText = "<p id='nsl-redirect-overlay-text'>" + _localizedStrings.redirect_overlay_text + "</p>";
- switch (_redirectOverlay) {
- case "overlay-only":
- break;
- case "overlay-with-spinner":
- overlayHTML = overlayContainer + overlaySpinner + overlayContainerClose;
- break;
- default:
- overlayHTML = overlayContainer + overlaySpinner + overlayTitle + overlayText + overlayContainerClose;
- break;
- }
- overlay.insertAdjacentHTML("afterbegin", overlayHTML);
- document.body.appendChild(overlay);
- }
- window.location = url;
- };
- var targetWindow = _targetWindow || 'prefer-popup',
- lastPopup = false;
- var buttonLinks = document.querySelectorAll(' a[data-plugin="nsl"][data-action="connect"], a[data-plugin="nsl"][data-action="link"]');
- buttonLinks.forEach(function (buttonLink) {
- buttonLink.addEventListener('click', function (e) {
- if (lastPopup && !lastPopup.closed) {
- e.preventDefault();
- lastPopup.focus();
- } else {
- var href = this.href,
- success = false;
- if (href.indexOf('?') !== -1) {
- href += '&';
- } else {
- href += '?';
- }
- var redirectTo = this.dataset.redirect;
- if (redirectTo === 'current') {
- href += 'redirect=' + encodeURIComponent(window.location.href) + '&';
- } else if (redirectTo && redirectTo !== '') {
- href += 'redirect=' + encodeURIComponent(redirectTo) + '&';
- }
- if (targetWindow !== 'prefer-same-window' && checkWebView()) {
- targetWindow = 'prefer-same-window';
- }
- if (targetWindow === 'prefer-popup') {
- lastPopup = NSLPopup(href + 'display=popup', 'nsl-social-connect', this.dataset.popupwidth, this.dataset.popupheight);
- if (lastPopup) {
- success = true;
- e.preventDefault();
- }
- } else if (targetWindow === 'prefer-new-tab') {
- var newTab = window.open(href + 'display=popup', '_blank');
- if (newTab) {
- if (window.focus) {
- newTab.focus();
- }
- success = true;
- e.preventDefault();
- }
- }
- if (!success) {
- window.location = href;
- e.preventDefault();
- }
- }
- });
- });
- var googleLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="google"]');
- if (googleLoginButtons.length && checkWebView() && !isAllowedWebViewForUserAgent('google')) {
- googleLoginButtons.forEach(function (googleLoginButton) {
- googleLoginButton.remove();
- });
- }
- var facebookLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="facebook"]');
- if (facebookLoginButtons.length && checkWebView() && /Android/.test(window.navigator.userAgent) && !isAllowedWebViewForUserAgent('facebook')) {
- facebookLoginButtons.forEach(function (facebookLoginButton) {
- facebookLoginButton.remove();
- });
- }
- });
|