Permission Denied - Disqus

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

Reply to " Permission Denied - Disqus"

Here you can reply to the paste above