Paste Search Dynamic
Recent pastes
There was an error submitting
  1.  
  2.  
  3.  
  4.  
  5. <!DOCTYPE html>
  6. <html lang="en-us">
  7. <head>
  8.    
  9.     <link rel="shortcut icon" href="//a.disquscdn.com/1596763802/img/favicon16-32.ico" type="image/vnd.microsoft.icon">
  10.  
  11.  
  12.     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  13.     <meta http-equiv="Content-Language" content="en-us">
  14.     <meta name="keywords" content="Disqus, disqus.com, comments, blog, blogs, discussion">
  15.     <meta name="google" value="notranslate" />
  16.     <title>
  17.    
  18.     Sign In - Disqus
  19.  
  20.     </title>
  21.  
  22.     <meta name="description" content="Disqus is a global comment system that improves discussion on websites and connects conversations across the web.">
  23.  
  24.    
  25.         <script type="text/javascript" charset="utf-8">
  26.     document.domain = 'disqus.com';
  27.     if (window.context === undefined) {
  28.         var context = {};
  29.     }
  30.     context.disqusUrl = 'https://disqus.com';
  31.     context.revealUrl = 'http://hubspot.disqus.biz/reveal-by-disqus-organic';
  32.     context.disqusDomain = 'disqus.com';
  33.     context.mediaUrl = '//a.disquscdn.com/1596763802/';
  34.     context.uploadsUrl = '//a.disquscdn.com/uploads';
  35.     context.sslUploadsUrl = '//a.disquscdn.com/uploads';
  36.     context.loginUrl = 'https://disqus.com/profile/login/';
  37.     context.signupUrl = 'https://disqus.com/profile/signup/';
  38.     context.apiUrl = '//disqus.com/api/3.0/';
  39.     context.apiPublicKey = 'Y1S1wGIzdc63qnZ5rhHfjqEABGA4ZTDncauWFFWWTUBqkmLjdxloTb7ilhGnZ7z1';
  40.    
  41.     context.forum = null;
  42.     context.adminUrl = 'https://disqus.com';
  43.    
  44.     context.urlMap = {
  45.         'signup': 'http://disqus.com/admin/signup/',
  46.         'dashboard': 'http://disqus.com/dashboard/',
  47.         'admin': 'https://disqus.com/admin/',
  48.        
  49.         'logout': '//disqus.com/logout/',
  50.         'home': 'https://disqus.com',
  51.         'home_settings_profile': 'https://disqus.com/home/settings/profile/',
  52.         'for_websites': 'http://disqus.com/websites/',
  53.         'for_publishers': 'http://hubspot.disqus.biz/reveal-by-disqus-organic',
  54.         'login': 'https://disqus.com/profile/login/'
  55.     };
  56.     context.navMap = {
  57.         'signup': '',
  58.         'dashboard': '',
  59.         'admin': '',
  60.         'addons': ''
  61.     };
  62. </script>
  63.  
  64.         <script src="//a.disquscdn.com/1596763802/js/src/auth_context.js" type="text/javascript" charset="utf-8"></script>
  65.    
  66.  
  67.     <link rel="stylesheet" href="//a.disquscdn.com/1596763802/build/css/f657bd03b179.css" type="text/css" />
  68.  
  69.    
  70.    
  71.  
  72.    
  73.    
  74.  
  75.    
  76.        
  77.  
  78.  
  79. <script type="text/javascript" src="//a.disquscdn.com/1596763802/build/js/abadd50d331d.js"></script>
  80.  
  81. <script>
  82. //
  83. // shared/foundation.js
  84. //
  85. // This file contains the absolute minimum code necessary in order
  86. // to create a new application in the DISQUS namespace.
  87. //
  88. // You should load this file *before* anything that modifies the DISQUS global.
  89. //
  90.  
  91. /*jshint browser:true, undef:true, strict:true, expr:true, white:true */
  92. /*global DISQUS:true */
  93.  
  94. var DISQUS = (function (window, undefined) {
  95.     "use strict";
  96.  
  97.     var DISQUS = window.DISQUS || {};
  98.  
  99.     // Exception thrown from DISQUS.assert method on failure
  100.     DISQUS.AssertionError = function (message) {
  101.         this.message = message;
  102.     };
  103.  
  104.     DISQUS.AssertionError.prototype.toString = function () {
  105.         return 'Assertion Error: ' + (this.message || '[no message]');
  106.     };
  107.  
  108.  
  109.     // Raises a DISQUS.AssertionError if value is falsy
  110.     DISQUS.assert = function (value, message, soft) {
  111.         if (value)
  112.             return;
  113.  
  114.         if (soft)
  115.             window.console && window.console.log("DISQUS assertion failed: " + message);
  116.         else
  117.             throw new DISQUS.AssertionError(message);
  118.     };
  119.  
  120.  
  121.     // Functions to clean attached modules (used by define and cleanup)
  122.     var cleanFuncs = [];
  123.  
  124.     // Attaches a new public interface (module) to the DISQUS namespace.
  125.     // For example, if DISQUS object is { 'a': { 'b': {} } }:
  126.     //
  127.     //   DISQUS.define('a.b.c', function () { return { 'd': 'hello' }; }); will transform it into
  128.     //     -> { 'a': { 'b': { 'c': { 'd' : hello' }}}}
  129.     //
  130.     //   and DISQUS.define('a', function () { return { 'x': 'world' }; }); will transform it into
  131.     //     -> { 'a': { 'b': {}}, 'x': 'world' }
  132.     //
  133.     // Attach modules to DISQUS using only this function.
  134.  
  135.     DISQUS.define = function (name, fn) {
  136.         /*jshint loopfunc:true */
  137.         if (typeof name === 'function') {
  138.             fn = name;
  139.             name = '';
  140.         }
  141.  
  142.         var parts = name.split('.');
  143.         var part  = parts.shift();
  144.         var cur   = DISQUS;
  145.  
  146.         var exports = (fn || function () { return {}; }).call({
  147.             overwrites: function (obj) {
  148.                 obj.__overwrites__ = true;
  149.                 return obj;
  150.             }
  151.         }, window);
  152.  
  153.         while (part) {
  154.             cur = (cur[part] ? cur[part] : cur[part] = {});
  155.             part = parts.shift();
  156.         }
  157.  
  158.         for (var key in exports) {
  159.             if (!exports.hasOwnProperty(key))
  160.                 continue;
  161.  
  162.             /*jshint eqnull:true */
  163.             if (!exports.__overwrites__ && cur[key] !== null) {
  164.                 DISQUS.assert(!cur.hasOwnProperty(key),
  165.                               'Unsafe attempt to redefine existing module: ' + key,
  166.                               true /* soft assertion */);
  167.             }
  168.  
  169.             cur[key] = exports[key];
  170.             cleanFuncs.push(function (cur, key) {
  171.                 return function () { delete cur[key]; };
  172.             }(cur, key));
  173.         }
  174.         return cur;
  175.     };
  176.  
  177.  
  178.     // Alias for DISQUS.define for the sake of semantics.
  179.     // You should use it when you need to get a reference to another
  180.     // DISQUS module before that module is defined:
  181.     //
  182.     //   var collections = DISQUS.use('lounge.collections');
  183.     //
  184.     // DISQUS.use is a single argument function because we don't
  185.     // want to encourage people to use it instead of DISQUS.define.
  186.  
  187.     DISQUS.use = function (name) {
  188.         return DISQUS.define(name);
  189.     };
  190.  
  191.     DISQUS.cleanup = function () {
  192.         for (var i = 0; i < cleanFuncs.length; i++) {
  193.             cleanFuncs[i]();
  194.         }
  195.     };
  196.  
  197.     return DISQUS;
  198. })(window);
  199.  
  200. /*jshint expr:true, undef:true, strict:true, white:true, browser:true */
  201. /*global DISQUS:false*/
  202. //
  203. // shared/corefuncs.js
  204. //
  205.  
  206. DISQUS.define(function (window, undefined) {
  207.     "use strict";
  208.  
  209.     var DISQUS     = window.DISQUS;
  210.     var document   = window.document;
  211.     var head       = document.getElementsByTagName('head')[0] ||
  212.                      document.body;
  213.     var jobs       = { running: false, timer: null, queue: [] };
  214.     var uid        = 0;
  215.  
  216.     // Taken from _.uniqueId
  217.     DISQUS.getUid = function (prefix) {
  218.         var id = ++uid + '';
  219.         return prefix ? prefix + id : id;
  220.     };
  221.  
  222.     /* Defers func() execution until cond() is true */
  223.     DISQUS.defer = function (cond, func) {
  224.         function beat() {
  225.             /*jshint boss:true */
  226.             var queue = jobs.queue;
  227.  
  228.             if (queue.length === 0) {
  229.                 jobs.running = false;
  230.                 clearInterval(jobs.timer);
  231.             }
  232.  
  233.             for (var i = 0, pair; pair = queue[i]; i++) {
  234.                 if (pair[0]()) {
  235.                     queue.splice(i--, 1);
  236.                     pair[1]();
  237.                 }
  238.             }
  239.         }
  240.  
  241.         jobs.queue.push([cond, func]);
  242.         beat();
  243.  
  244.         if (!jobs.running) {
  245.             jobs.running = true;
  246.             jobs.timer = setInterval(beat, 100);
  247.         }
  248.     };
  249.  
  250.     DISQUS.isOwn = function (obj, key) {
  251.         // The object.hasOwnProperty method fails when the
  252.         // property under consideration is named 'hasOwnProperty'.
  253.         return Object.prototype.hasOwnProperty.call(obj, key);
  254.     };
  255.  
  256.     DISQUS.isString = function (str) {
  257.         return Object.prototype.toString.call(str) === "[object String]";
  258.     };
  259.  
  260.     /*
  261.      * Iterates over an object or a collection and calls a callback
  262.      * function with each item as a parameter.
  263.      */
  264.     DISQUS.each = function (collection, callback) {
  265.         var length = collection.length,
  266.             forEach = Array.prototype.forEach;
  267.  
  268.         if (!isNaN(length)) {
  269.             // Treat collection as an array
  270.             if (forEach) {
  271.                 forEach.call(collection, callback);
  272.             } else {
  273.                 for (var i = 0; i < length; i++) {
  274.                     callback(collection[i], i, collection);
  275.                 }
  276.             }
  277.         } else {
  278.             // Treat collection as an object
  279.             for (var key in collection) {
  280.                 if (DISQUS.isOwn(collection, key)) {
  281.                     callback(collection[key], key, collection);
  282.                 }
  283.             }
  284.         }
  285.     };
  286.  
  287.     // Borrowed from underscore
  288.     DISQUS.extend = function (obj) {
  289.         DISQUS.each(Array.prototype.slice.call(arguments, 1), function (source) {
  290.             for (var prop in source) {
  291.                 obj[prop] = source[prop];
  292.             }
  293.         });
  294.         return obj;
  295.     };
  296.  
  297.     DISQUS.serializeArgs = function (params) {
  298.         var pcs = [];
  299.         DISQUS.each(params, function (val, key) {
  300.             if (val !== undefined) {
  301.                 pcs.push(key + (val !== null ? '=' + encodeURIComponent(val) : ''));
  302.             }
  303.         });
  304.         return pcs.join('&');
  305.     };
  306.  
  307.     DISQUS.serialize = function (url, params, nocache) {
  308.         if (params) {
  309.             url += (~url.indexOf('?') ?
  310.                         (url.charAt(url.length - 1) == '&' ? '': '&') : '?');
  311.             url += DISQUS.serializeArgs(params);
  312.         }
  313.  
  314.         if (nocache) {
  315.             var ncp = {};
  316.             ncp[(new Date()).getTime()] = null;
  317.             return DISQUS.serialize(url, ncp);
  318.         }
  319.  
  320.         var len = url.length;
  321.         return (url.charAt(len - 1) == "&" ? url.slice(0, len - 1) : url);
  322.     };
  323.  
  324.     var TIMEOUT_DURATION = 2e4; // 20 seconds
  325.     var addEvent, removeEvent;
  326.  
  327.     // select the correct event listener function. all of our supported
  328.     // browsers will use one of these
  329.     if ('addEventListener' in window) {
  330.         addEvent = function (node, event, handler) {
  331.             node.addEventListener(event, handler, false);
  332.         };
  333.         removeEvent = function (node, event, handler) {
  334.             node.removeEventListener(event, handler, false);
  335.         };
  336.     }
  337.     else {
  338.         addEvent = function (node, event, handler) {
  339.             node.attachEvent('on' + event, handler);
  340.         };
  341.         removeEvent = function (node, event, handler) {
  342.             node.detachEvent('on' + event, handler);
  343.         };
  344.     }
  345.  
  346.     DISQUS.require = function (url, params, nocache, success, failure) {
  347.         var script = document.createElement('script');
  348.         var evName = script.addEventListener ? 'load' : 'readystatechange';
  349.         var timeout = null;
  350.  
  351.         script.src = DISQUS.serialize(url, params, nocache);
  352.         script.async = true;
  353.         script.charset = 'UTF-8';
  354.  
  355.         function handler(ev) {
  356.             ev = ev || window.event;
  357.             if (!ev.target) {
  358.                 ev.target = ev.srcElement;
  359.             }
  360.  
  361.             if (ev.type != 'load' && !/^(complete|loaded)$/.test(ev.target.readyState)) {
  362.                 return; // Not ready yet
  363.             }
  364.  
  365.             if (success) {
  366.                 success();
  367.             }
  368.  
  369.             if (timeout) {
  370.                 clearTimeout(timeout);
  371.             }
  372.  
  373.             removeEvent(ev.target, evName, handler);
  374.         }
  375.  
  376.         if (success || failure) {
  377.             addEvent(script, evName, handler);
  378.         }
  379.  
  380.         if (failure) {
  381.             timeout = setTimeout(function () {
  382.                 failure();
  383.             }, TIMEOUT_DURATION);
  384.         }
  385.  
  386.         head.appendChild(script);
  387.         return DISQUS;
  388.     };
  389.  
  390.     DISQUS.requireStylesheet = function (url, params, nocache) {
  391.         var link = document.createElement('link');
  392.         link.rel = 'stylesheet';
  393.         link.type = 'text/css';
  394.         link.href = DISQUS.serialize(url, params, nocache);
  395.         head.appendChild(link);
  396.         return DISQUS;
  397.     };
  398.  
  399.     DISQUS.requireSet = function (urls, nocache, callback) {
  400.         var remaining = urls.length;
  401.         DISQUS.each(urls, function (url) {
  402.             DISQUS.require(url, {}, nocache, function () {
  403.                 if (--remaining === 0) { callback(); }
  404.             });
  405.         });
  406.     };
  407.  
  408.     DISQUS.injectCss = function (css) {
  409.         var style = document.createElement('style');
  410.         style.setAttribute('type', 'text/css');
  411.  
  412.         // Make inline CSS more readable by splitting each rule onto a separate line
  413.         css = css.replace(/\}/g, "}\n");
  414.  
  415.         if (window.location.href.match(/^https/))
  416.             css = css.replace(/http:\/\//g, 'https://');
  417.  
  418.         if (style.styleSheet) { // Internet Explorer only
  419.             style.styleSheet.cssText = css;
  420.         } else {
  421.             style.appendChild(document.createTextNode(css));
  422.         }
  423.  
  424.         head.appendChild(style);
  425.     };
  426.  
  427.     DISQUS.isString = function (val) {
  428.         return Object.prototype.toString.call(val) === '[object String]';
  429.     };
  430. });
  431.  
  432. /*jshint boss:true*/
  433. /*global DISQUS */
  434. DISQUS.define('Events', function (window, undefined) {
  435.     "use strict";
  436.  
  437.     // Returns a function that will be executed at most one time, no matter how
  438.     // often you call it. Useful for lazy initialization.
  439.     var once = function (func) {
  440.         var ran = false, memo;
  441.         return function () {
  442.             if (ran) return memo;
  443.             ran = true;
  444.             memo = func.apply(this, arguments);
  445.             func = null;
  446.             return memo;
  447.         };
  448.     };
  449.     var has = DISQUS.isOwn;
  450.     var keys = Object.keys || function (obj) {
  451.         if (obj !== Object(obj)) throw new TypeError('Invalid object');
  452.         var keys = [];
  453.         for (var key in obj) if (has(obj, key)) keys[keys.length] = key;
  454.         return keys;
  455.     };
  456.     var slice = [].slice;
  457.  
  458.     // Backbone.Events
  459.     // ---------------
  460.  
  461.     // A module that can be mixed in to *any object* in order to provide it with
  462.     // custom events. You may bind with `on` or remove with `off` callback
  463.     // functions to an event; `trigger`-ing an event fires all callbacks in
  464.     // succession.
  465.     //
  466.     // var object = {};
  467.     // _.extend(object, Backbone.Events);
  468.     // object.on('expand', function(){ alert('expanded'); });
  469.     // object.trigger('expand');
  470.     //
  471.     var Events = {
  472.  
  473.         // Bind an event to a `callback` function. Passing `"all"` will bind
  474.         // the callback to all events fired.
  475.         on: function (name, callback, context) {
  476.             if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
  477.             this._events = this._events || {};
  478.             var events = this._events[name] || (this._events[name] = []);
  479.             events.push({callback: callback, context: context, ctx: context || this});
  480.             return this;
  481.         },
  482.  
  483.         // Bind an event to only be triggered a single time. After the first time
  484.         // the callback is invoked, it will be removed.
  485.         once: function (name, callback, context) {
  486.             if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this;
  487.             var self = this;
  488.             var onced = once(function () {
  489.                 self.off(name, onced);
  490.                 callback.apply(this, arguments);
  491.             });
  492.             onced._callback = callback;
  493.             return this.on(name, onced, context);
  494.         },
  495.  
  496.         // Remove one or many callbacks. If `context` is null, removes all
  497.         // callbacks with that function. If `callback` is null, removes all
  498.         // callbacks for the event. If `name` is null, removes all bound
  499.         // callbacks for all events.
  500.         off: function (name, callback, context) {
  501.             var retain, ev, events, names, i, l, j, k;
  502.             if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this;
  503.             if (!name && !callback && !context) {
  504.                 this._events = {};
  505.                 return this;
  506.             }
  507.  
  508.             names = name ? [name] : keys(this._events);
  509.             for (i = 0, l = names.length; i < l; i++) {
  510.                 name = names[i];
  511.                 if (events = this._events[name]) {
  512.                     this._events[name] = retain = [];
  513.                     if (callback || context) {
  514.                         for (j = 0, k = events.length; j < k; j++) {
  515.                             ev = events[j];
  516.                             if ((callback && callback !== ev.callback && callback !== ev.callback._callback) ||
  517.                                 (context && context !== ev.context)) {
  518.                                 retain.push(ev);
  519.                             }
  520.                         }
  521.                     }
  522.                     if (!retain.length) delete this._events[name];
  523.                 }
  524.             }
  525.  
  526.             return this;
  527.         },
  528.  
  529.         // Trigger one or many events, firing all bound callbacks. Callbacks are
  530.         // passed the same arguments as `trigger` is, apart from the event name
  531.         // (unless you're listening on `"all"`, which will cause your callback to
  532.         // receive the true name of the event as the first argument).
  533.         trigger: function (name) {
  534.             if (!this._events) return this;
  535.             var args = slice.call(arguments, 1);
  536.             if (!eventsApi(this, 'trigger', name, args)) return this;
  537.             var events = this._events[name];
  538.             var allEvents = this._events.all;
  539.             if (events) triggerEvents(events, args);
  540.             if (allEvents) triggerEvents(allEvents, arguments);
  541.             return this;
  542.         },
  543.  
  544.         // Tell this object to stop listening to either specific events ... or
  545.         // to every object it's currently listening to.
  546.         stopListening: function (obj, name, callback) {
  547.             var listeners = this._listeners;
  548.             if (!listeners) return this;
  549.             var deleteListener = !name && !callback;
  550.             if (typeof name === 'object') callback = this;
  551.             if (obj) (listeners = {})[obj._listenerId] = obj;
  552.             for (var id in listeners) {
  553.                 listeners[id].off(name, callback, this);
  554.                 if (deleteListener) delete this._listeners[id];
  555.             }
  556.             return this;
  557.         }
  558.  
  559.     };
  560.  
  561.     // Regular expression used to split event strings.
  562.     var eventSplitter = /\s+/;
  563.  
  564.     // Implement fancy features of the Events API such as multiple event
  565.     // names `"change blur"` and jQuery-style event maps `{change: action}`
  566.     // in terms of the existing API.
  567.     var eventsApi = function (obj, action, name, rest) {
  568.         if (!name) return true;
  569.  
  570.         // Handle event maps.
  571.         if (typeof name === 'object') {
  572.             for (var key in name) {
  573.                 obj[action].apply(obj, [key, name[key]].concat(rest));
  574.             }
  575.             return false;
  576.         }
  577.  
  578.         // Handle space separated event names.
  579.         if (eventSplitter.test(name)) {
  580.             var names = name.split(eventSplitter);
  581.             for (var i = 0, l = names.length; i < l; i++) {
  582.                 obj[action].apply(obj, [names[i]].concat(rest));
  583.             }
  584.             return false;
  585.         }
  586.  
  587.         return true;
  588.     };
  589.  
  590.     // A difficult-to-believe, but optimized internal dispatch function for
  591.     // triggering events. Tries to keep the usual cases speedy (most internal
  592.     // Backbone events have 3 arguments).
  593.     var triggerEvents = function (events, args) {
  594.         var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];
  595.         switch (args.length) {
  596.         case 0:
  597.             while (++i < l) {
  598.                 (ev = events[i]).callback.call(ev.ctx);
  599.             }
  600.             return;
  601.         case 1:
  602.             while (++i < l) {
  603.                 (ev = events[i]).callback.call(ev.ctx, a1);
  604.             }
  605.             return;
  606.         case 2:
  607.             while (++i < l) {
  608.                 (ev = events[i]).callback.call(ev.ctx, a1, a2);
  609.             }
  610.             return;
  611.         case 3:
  612.             while (++i < l) {
  613.                 (ev = events[i]).callback.call(ev.ctx, a1, a2, a3);
  614.             }
  615.             return;
  616.         default:
  617.             while (++i < l) {
  618.                 (ev = events[i]).callback.apply(ev.ctx, args);
  619.             }
  620.         }
  621.     };
  622.  
  623.     var listenMethods = {listenTo: 'on', listenToOnce: 'once'};
  624.  
  625.     // Inversion-of-control versions of `on` and `once`. Tell *this* object to
  626.     // listen to an event in another object ... keeping track of what it's
  627.     // listening to.
  628.     DISQUS.each(listenMethods, function (implementation, method) {
  629.         Events[method] = function (obj, name, callback) {
  630.             var listeners = this._listeners || (this._listeners = {});
  631.             var id = obj._listenerId || (obj._listenerId = DISQUS.getUid('l'));
  632.             listeners[id] = obj;
  633.             if (typeof name === 'object') callback = this;
  634.             obj[implementation](name, callback, this);
  635.             return this;
  636.         };
  637.     });
  638.  
  639.     // Aliases for backwards compatibility.
  640.     Events.bind = Events.on;
  641.     Events.unbind = Events.off;
  642.  
  643.     return Events;
  644. });
  645.  // used for /follow/ /login/ /signup/ social oauth dialogs
  646. // faking the bus
  647. DISQUS.use('Bus');
  648. _.extend(DISQUS.Bus, DISQUS.Events);
  649. </script>
  650.  
  651.  
  652.  
  653.    
  654.  
  655.    
  656.     <script src="//a.disquscdn.com/1596763802/js/src/global.js" charset="utf-8"></script>
  657.     <script type="text/javascript">
  658.     if (window.AB_TESTS === undefined) {
  659.         var AB_TESTS = {};
  660.     }
  661. </script>
  662. <script type="text/javascript" charset="utf-8">
  663.     // Global tests
  664.     $(document).ready(function() {
  665.         $('a[rel*=facebox]').facebox();
  666.     });
  667. </script>
  668.  
  669.     <script type="text/x-underscore-template" data-template-name="global-nav">
  670.  
  671. <% var has_custom_avatar = data.avatar_url && data.avatar_url.indexOf('noavatar') < 0; %>
  672. <% var has_custom_username = data.username && data.username.indexOf('disqus_') < 0; %>
  673. <% if (data.username) { %>
  674.     <% if (data.has_forums) { %>
  675.         <li class="admin<% if (has_custom_avatar || !has_custom_username) { %> avatar-menu-admin<% } %>" data-analytics="header admin"><a href="<%= data.urlMap.admin %>"><strong>Admin</strong></a></li>
  676.     <% } %>
  677.     <li class="user-dropdown dropdown-toggle<% if (has_custom_avatar || !has_custom_username) { %> avatar-menu<% } else { %> username-menu<% } %>" data-analytics="header username dropdown" data-floater-marker="<% if (has_custom_avatar || !has_custom_username) { %>square<% } %>">
  678.         <a href="<%= data.urlMap.home %>/<%= data.username %>/">
  679.             <% if (has_custom_avatar) { %>
  680.                 <img src="<%= data.avatar_url %>" class="avatar">
  681.             <% } else if (has_custom_username) { %>
  682.                 <%= data.username %>
  683.             <% } else { %>
  684.                 <img src="<%= data.avatar_url %>" class="avatar">
  685.             <% } %>
  686.             <span class="caret"></span>
  687.         </a>
  688.         <ul class="clearfix dropdown">
  689.             <li data-analytics="header view profile"><a href="<%= data.urlMap.home %>/<%= data.username %>/">View Profile</a></li>
  690.             <li class="js-edit-profile" data-analytics="header edit profile"><a href="<%= data.urlMap.home_settings_profile %>">Edit Profile</a></li>
  691.             <li class="logout" data-analytics="header logout"><a href="<%= data.urlMap.logout %>">Logout</a></li>
  692.         </ul>
  693.     </li>
  694. <% } else { %>
  695.     <li class="link-login" data-analytics="header login"><a href="<%= data.urlMap.login %>?next=<%= encodeURIComponent(document.location.href) %>">Log in</a></li>
  696. <% } %>
  697.  
  698.  
  699. </script>
  700.  
  701.     <!--[if lte IE 7]>
  702.   <script src="//a.disquscdn.com/1596763802/js/src/border_box_model.js"></script>
  703. <![endif]-->
  704. <!--[if lte IE 8]>
  705.   <script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.5.3/modernizr.min.js"></script>
  706.   <script src="//a.disquscdn.com/1596763802/js/src/selectivizr.js"></script>
  707. <![endif]-->
  708.  
  709.    
  710.  
  711.    
  712.     <meta name="viewport" content="width=device-width, user-scalable=no">
  713.     <meta name="apple-mobile-web-app-capable" content="yes">
  714.  
  715.  
  716.    
  717.         <script type="text/javascript" charset="utf-8">
  718.             // Global tests
  719.             $(document).ready(function() {
  720.                 $('a[rel*=facebox]').facebox();
  721.             });
  722.         </script>
  723.        
  724.    
  725.    
  726. </head>
  727. <body class="" id="">
  728.    
  729.    
  730.  
  731.    
  732.     <section class="container--narrow login">
  733.         <form
  734.             id="login-form"
  735.             action="https://disqus.com/profile/login/?next=https%3A//disqus.com//disqus.com/FateXBlood&amp;"
  736.             method="post"
  737.             accept-charset="utf-8"
  738.             novalidate
  739.         >
  740.             <input type='hidden' name='csrfmiddlewaretoken' value='pJhEHVtCAdIbnT9UBoaxbIe0MAG4EnwL' />
  741.             <div class="nav-tab">
  742.                 <a href="https://disqus.com/profile/signup/?next=https%3A//disqus.com//disqus.com/FateXBlood" class="nav-tab__item">
  743.                     Signup
  744.                 </a>
  745.                 <div class="nav-tab__item is-active">
  746.                     Login
  747.                 </div>
  748.             </div>
  749.  
  750.             <p class="text-center">Login to Disqus with your social media account, username, or email address</p>
  751.  
  752.            
  753.            
  754.             <div class="social-login__wrapper">
  755.                 <button title="facebook" type="button" class="social-button -facebook" data-service="facebook">
  756.                     <span class="auth-container">
  757.                         <img src="//a.disquscdn.com/1596763802/img/icons/facebook.svg" alt="Facebook">
  758.                     </span>
  759.                 </button>
  760.                 <button title="twitter" type="button" class="social-button -twitter" data-service="twitter">
  761.                     <span class="auth-container">
  762.                         <img src="//a.disquscdn.com/1596763802/img/icons/twitter.svg" alt="Twitter">
  763.                     </span>
  764.                 </button>
  765.                 <button title="google" type="button" class="social-button -google" data-service="google">
  766.                     <span class="auth-container">
  767.                         <img src="//a.disquscdn.com/1596763802/img/icons/google.svg" alt="Google">
  768.                     </span>
  769.                 </button>
  770.             </div>
  771.            
  772.  
  773.            
  774.  
  775.             <fieldset class="input-group">
  776.                 <input id="username-input" type="email" name="username" tabindex="20" value="" placeholder="Email or username" required autofocus>
  777.             </fieldset>
  778.  
  779.             <fieldset class="input-group">
  780.                 <input id="password-input" type="password" name="password" tabindex="21" placeholder="Password" required>
  781.             </fieldset>
  782.  
  783.            
  784.                 <script src='https://www.google.com/recaptcha/api.js'></script>
  785. <script type="text/javascript">
  786.     var DjangoRecaptchaOptions = {
  787.   "lang": "en"
  788. };
  789.     if (typeof RecaptchaOptions !== 'object') {
  790.         RecaptchaOptions = DjangoRecaptchaOptions;
  791.     } else {
  792.         for (key in DjangoRecaptchaOptions) {
  793.             RecaptchaOptions[key] = DjangoRecaptchaOptions[key];
  794.         }
  795.     }
  796. </script>
  797. <div class="g-recaptcha" data-sitekey="6Lfx6u0SAAAAAI1QkeTW397iQv1MsBfbDaYlwxK_"></div>
  798. <noscript>
  799.   <div style="width: 302px; height: 352px;">
  800.     <div style="width: 302px; height: 352px; position: relative;">
  801.       <div style="width: 302px; height: 352px; position: absolute;">
  802.         <iframe src="https://www.google.com/recaptcha/api/fallback?k=6Lfx6u0SAAAAAI1QkeTW397iQv1MsBfbDaYlwxK_"
  803.                 frameborder="0" scrolling="no"
  804.                 style="width: 302px; height:352px; border-style: none;">
  805.         </iframe>
  806.       </div>
  807.       <div style="width: 250px; height: 80px; position: absolute; border-style: none;
  808.                  bottom: 21px; left: 25px; margin: 0px; padding: 0px; right: 25px;">
  809.         <textarea id="g-recaptcha-response" name="g-recaptcha-response"
  810.                   class="recaptcha_challenge_field"
  811.                   style="width: 250px; height: 80px; border: 1px solid #c1c1c1;
  812.                         margin: 0px; padding: 0px; resize: none;" value="">
  813.         </textarea>
  814.         <input type='hidden' name='recaptcha_response_field' value='manual_challenge' />
  815.       </div>
  816.     </div>
  817.   </div>
  818. </noscript>
  819.            
  820.  
  821.             <div class="button-container">
  822.                 <button class="button submit" data-analytics="sign-in" tabindex="22">Login<span class="spinner"></span></button>
  823.             </div>
  824.  
  825.             <div class="spacing-top">
  826.                 <a href="https://disqus.com/forgot/">Forgot your password?</a>
  827.             </div>
  828.         </form>
  829.     </section>
  830.  
  831.    
  832.    
  833.  
  834.  
  835. <div class="text-center">
  836.     <a href="/" class="logo" data-analytics="site logo">
  837.         <img src="//a.disquscdn.com/1596763802/img/disqus-logo-alt-hidpi.png" width="102" height="20" alt="Disqus" title="Disqus - Discover your community" style="padding-bottom: 20px;"/>
  838.     </a>
  839. </div>
  840.  
  841.  
  842.  
  843.    
  844.    
  845.    
  846.  
  847.    
  848.  
  849.         <script>
  850.         (function (){
  851.             // adds a classname for css to target the current page without passing in special things from the server or wherever
  852.             // replacing all characters not allowable in classnames
  853.             var newLocation = encodeURIComponent(window.location.pathname).replace(/[\.!~*'\(\)]/g, '_');
  854.            // cleaning up remaining url-encoded symbols for clarity sake
  855.            newLocation = newLocation.replace(/%2F/g, '-').replace(/^-/, '').replace(/-$/, '');
  856.            if (newLocation === '') {
  857.                newLocation = 'homepage';
  858.            }
  859.            $('body').addClass('' + newLocation);
  860.        }());
  861.  
  862.        $(function ($) {
  863.            // adds 'page-active' class to links matching the page url
  864.            $('a[href="' + window.location.pathname + '"]').addClass('page-active');
  865.        });
  866.  
  867.        $(document).delegate('[data-toggle-selector]', 'click', function (e) {
  868.            var $this = $(this);
  869.            $($this.attr('data-toggle-selector')).toggle();
  870.            e.preventDefault();
  871.        });
  872.        </script>
  873.    
  874.  
  875. <script src="https://c.disquscdn.com/next/current/embed/jester.js"></script>
  876. <script>
  877.    var jesterObj = {
  878.        product: 'dotcom',
  879.        zone: 'login',
  880.    };
  881.    
  882.    
  883.    window.DISQUS.jester.pv(jesterObj);
  884. </script>
  885.  
  886.  
  887. <script>
  888. DISQUS.define('web.urls', function () {
  889.    return {
  890.        twitter: 'https://disqus.com/_ax/twitter/begin/?ctkn=pJhEHVtCAdIbnT9UBoaxbIe0MAG4EnwL&amp;',
  891.         google: 'https://disqus.com/_ax/google/begin/?ctkn=pJhEHVtCAdIbnT9UBoaxbIe0MAG4EnwL&amp;',
  892.         facebook: 'https://disqus.com/_ax/facebook/begin/?ctkn=pJhEHVtCAdIbnT9UBoaxbIe0MAG4EnwL&amp;',
  893.         dashboard: 'http://disqus.com/dashboard/'
  894.     }
  895. });
  896.  
  897. $(document).ready(function () {
  898.     $("form").submit(function () {
  899.         $(this).find('.button.submit')
  900.                .attr('disabled', 'disabled')
  901.                .addClass('submitted');
  902.         $(this).find('#password-input')
  903.                .attr('readonly', 'readonly');
  904.         $(this).find('#username-input')
  905.                .attr('readonly', 'readonly');
  906.     });
  907. });
  908. </script>
  909.  
  910.  
  911. <script src="https://c.disquscdn.com/next/current/embed/jester.js"></script>
  912. <script>
  913.     var trackClick = function (service) {
  914.         var jesterObj = {
  915.             verb: 'click',
  916.             object_type: 'link',
  917.             object_id: service,
  918.             product: 'dotcom',
  919.             zone: 'login',
  920.             section: service,
  921.         };
  922.  
  923.        
  924.  
  925.         window.DISQUS.jester.event(jesterObj);
  926.     };
  927.  
  928.     $('body').delegate('.social-button', 'click', function () {
  929.         trackClick(this.getAttribute('data-service'));
  930.     });
  931. </script>
  932.  
  933.  
  934. <script src="//a.disquscdn.com/1596763802/js/src/social_login.js"></script>
  935.  
  936.  
  937.    
  938.     <!-- helper jQuery tmpl partials -->
  939.     <script type="text/x-jquery-tmpl" id="profile-metadata-tmpl">
  940.        
  941.         data-profile-username="${username}" data-profile-hash="${emailHash}" href="/${username}"
  942.        
  943.     </script>
  944.     <script type="text/x-jquery-tmpl" id="profile-link-tmpl">
  945.        
  946.         <a class="profile-launcher" {{tmpl "#profile-metadata-tmpl"}} href="/${username}">${name}</a>
  947.        
  948.     </script>
  949.  
  950.     <script src="//a.disquscdn.com/1596763802/js/src/templates.js"></script>
  951.    
  952.  
  953.     <script src="//a.disquscdn.com/1596763802/js/src/modals.js"></script>
  954. <script>
  955.   DISQUS.ui.config({
  956.     disqusUrl: 'https://disqus.com',
  957.     mediaUrl: '//a.disquscdn.com/1596763802/'
  958.   });
  959. </script>
  960.  
  961. </body>
  962. </html>
  963.  
Parsed in 0.174 seconds