Advertisement
Guest User

Untitled

a guest
Oct 14th, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Opens a login overlay (or redirects to the login server).
  3.  *
  4.  * @copyright   2010, Blizzard Entertainment, Inc
  5.  * @class       Login
  6.  * @example
  7.  *
  8.  *      onclick="return Login.open('/login/url/');"
  9.  *      
  10.  */
  11.  
  12. var Login = {
  13.  
  14.     /**
  15.      * Configuration constants.
  16.      */
  17.     CONTAINER_ID: "login-embedded",
  18.     FADE_DURATION: "slow",
  19.  
  20.     /**
  21.      * Embedded login URL.
  22.      */
  23.     embeddedUrl: "/test_login.php",
  24.  
  25.     /**
  26.      * Use token to log in behind the scenes.
  27.      *
  28.      * @param token
  29.      */
  30.     success: function(token) {
  31.         $('<div/>', {
  32.             id: 'embedded-loader'
  33.         }).appendTo('body');
  34.  
  35.         window.setTimeout(function() {
  36.             var delim = window.location.search ? "&" : "?";
  37.  
  38.             if (window.location.hash.length === 0) {
  39.                 window.location = window.location + delim + "ST=" + token;
  40.             } else {
  41.                 var url = window.location.href.substring(0, window.location.href.length - window.location.hash.length);
  42.  
  43.                 window.location = url + delim + "ST=" + token + "&ST-frag=" + window.location.hash.substring(1);
  44.             }
  45.         }, 100);
  46.     },
  47.  
  48.     /**
  49.      * Open embedded login. Returns false to cancel default anchor action, or true if it should proceed.
  50.      *
  51.      * @param url
  52.      * @param legacyHref
  53.      * @param legacyReferrer
  54.      */
  55.     open: function(url, legacyHref, legacyReferrer) {
  56.         url = url || Login.embeddedUrl;
  57.        
  58.         if ("https:" === document.location.protocol) {
  59.             url += (url.indexOf('?') === -1) ? '?': '&';
  60.             url += "secureOrigin=true";
  61.         }
  62.  
  63.         if (document.getElementById(Login.CONTAINER_ID)) {
  64.             return false;
  65.         }
  66.  
  67.         // Old browsers have to use the standard login
  68.         if ((typeof postMessage !== "object" && typeof postMessage !== "function") || typeof JSON !== "object") {
  69.             if (legacyHref) {
  70.                 var delim = (legacyReferrer.indexOf("?") === -1) ? "?" : "&";
  71.                 document.location = legacyHref + encodeURIComponent(legacyReferrer + delim + "ST-frag=" + encodeURIComponent(Core.getHash()));             
  72.                 return false;
  73.             }
  74.  
  75.             return true;
  76.         }
  77.  
  78.         var container = $("<div/>", { id: Login.CONTAINER_ID });
  79.  
  80.         if (Core.isIE()) {
  81.             container.append($("<iframe/>", {
  82.                 src: url,
  83.                 frameborder: 0
  84.             }));
  85.  
  86.             $(window).resize(function() {
  87.                 var doc = $(document);
  88.  
  89.                 $('#blackout').css({
  90.                     width: doc.width(),
  91.                     height: doc.height()
  92.                 });
  93.             });
  94.         } else {
  95.             container.append($("<object/>").attr("data", url));
  96.         }
  97.  
  98.         container.appendTo("body").show();
  99.  
  100.         Blackout.show(null, function() {
  101.             Blackout.hide();
  102.             Login._close();
  103.         });
  104.  
  105.         Login._setListener();
  106.  
  107.         return false;
  108.     },
  109.  
  110.     /**
  111.      * Attempt to open the embedded login, or redirect.
  112.      *
  113.      * @param url
  114.      * @param legacyHref
  115.      * @param legacyReferrer
  116.      */
  117.     openOrRedirect: function(url, legacyHref, legacyReferrer) {
  118.         if (Login.open(url, legacyHref, legacyReferrer)) {
  119.             var href = location.href,
  120.                 delim = (href.indexOf("?") === -1) ? "?" : "&";
  121.  
  122.             location.href = href + delim +'login=true&cr=true';
  123.         }
  124.     },
  125.  
  126.     /**
  127.      * Close the login overlay.
  128.      *
  129.      * @param removeBlackout
  130.      */
  131.     _close: function(removeBlackout) {
  132.         Login._removeListener();
  133.         removeBlackout = removeBlackout || false;
  134.  
  135.         $("#"+ Login.CONTAINER_ID).fadeOut(Login.FADE_DURATION, function() {
  136.             $(this).remove();
  137.  
  138.             if (removeBlackout)
  139.                 Blackout.hide();
  140.         });
  141.     },
  142.  
  143.     /**
  144.      * Post message listener. Triggers specific actions.
  145.      *
  146.      * @param event
  147.      */
  148.     _messageListener: function(event) {
  149.         // No need to validate sender; no critical actions take place here
  150.         var data = JSON.parse(event.data);
  151.  
  152.         switch(data.action) {
  153.             case "onload":
  154.                 var type = Core.isIE() ? 'iframe' : 'object',
  155.                     node = $("#"+ Login.CONTAINER_ID),
  156.                     embed = $('#'+ Login.CONTAINER_ID +' '+ type);
  157.  
  158.                 node.css('height', data.height);
  159.                 embed.css('height', data.height);
  160.  
  161.                 if (data.height > 500) {
  162.                     node.css('margin-top', -(data.height / 2));
  163.                     node.css('margin-bottom', -(data.height / 2));
  164.                 }
  165.             break;
  166.             case "success":
  167.                 Login._close();
  168.                 Login.success(data.loginTicket);
  169.             break;
  170.             case "close":
  171.                 Login._close(true);
  172.             break;
  173.             case "redirect":
  174.                 window.location = data.url + "?ref=" + encodeURIComponent(window.location);
  175.             break;
  176.         }
  177.     },
  178.  
  179.     _setListener: function() {
  180.         Login._removeListener();
  181.         Login._listener = function(event) {
  182.             Login._messageListener(event);
  183.         };
  184.  
  185.         if (typeof addEventListener !== "undefined")
  186.             addEventListener("message", Login._listener, false);
  187.         else
  188.             attachEvent("onmessage", Login._listener); // IE
  189.     },
  190.  
  191.     _removeListener: function() {
  192.         if (!Login._listener)
  193.             return;
  194.  
  195.         if (typeof removeEventListener !== "undefined")
  196.             removeEventListener("message", Login._listener, false);
  197.         else
  198.             detachEvent("onmessage", Login._listener); // IE
  199.     }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement