Created
December 25, 2012 00:27
-
-
Save pajtai/4371152 to your computer and use it in GitHub Desktop.
disqus metadata.js - http://mediacdn.disqus.com/1356132141/build/next-discovery/metadata.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DISQUS.addBlocks("theme")(function (d) { | |
d.blocks.letUsKnow = function (f, c) { | |
var a = new d.Builder, | |
h = DISQUS.extend({}, f, c); | |
with(h) return a.put('<a href="https://www.surveymonkey.com/s/GHK872T" target="_blank">'), a.put(gettext("Let us know.")), a.put("</a>"), a.compile() | |
}; | |
d.blocks.relatedThread = function (f, c) { | |
var a = new d.Builder, | |
h = DISQUS.extend({}, f, c); | |
with(h) return a.put(' <li class="discovery-unit"> <div class="discovery-heading-wrapper"> <h3 title="'), a.put((a.esc || function (a) { | |
return a | |
})(thread.title)), | |
a.put('"> <a data-role="discovery-thread-title" class="title publisher-anchor-color" '), | |
function () { | |
var e = {}; | |
d.extend(e, c); | |
d.extend(e, {}); | |
a.put(d.renderBlock("linkAttributes", e)) | |
}(), a.put("> "), a.put(thread.title), a.put(' </a> </h3> </div> <ul class="meta"> <li class="comments"> <a '), | |
function () { | |
var e = {}; | |
d.extend(e, c); | |
d.extend(e, {}); | |
a.put(d.renderBlock("linkAttributes", e)) | |
}(), a.put("> "), | |
thread.posts === 1 ? (a.put(" "), a.put(gettext("1 comment")), a.put(" ")) : thread.posts >= 0 && (a.put(" "), a.put(d.interpolate(gettext("%(numPosts)s comments"), { | |
numPosts: thread.posts | |
})), a.put(" ")), a.put(' </a> </li> <li class="time">'), a.put((a.esc || function (a) { | |
return a | |
})(thread.createdAgo)), a.put('</li> </ul> <a class="top-comment" '), | |
function () { | |
var e = {}; | |
d.extend(e, c); | |
d.extend(e, {}); | |
a.put(d.renderBlock("linkAttributes", | |
e)) | |
}(), a.put(' data-role="discovery-top-comment"> <img src="'), a.put((a.esc || function (a) { | |
return a | |
})(urls.avatar.generic)), a.put('" alt="'), a.put(gettext("Default user")), a.put('" data-role="discovery-avatar"> <p><span class="user" data-role="discovery-top-comment-author">'), a.put('</span> — <span data-role="discovery-top-comment-snippet">'), a.put("</span></p> </a> </li>"), a.compile() | |
}; | |
d.blocks.linkAttributes = function (f, c) { | |
var a = new d.Builder, | |
h = DISQUS.extend({}, | |
f, c); | |
with(h) return a.put('href="'), a.put((a.esc || function (a) { | |
return a | |
})(thread.link)), a.put('#disqus_thread" data-redirect="'), a.put((a.esc || function (a) { | |
return a | |
})(thread.redirectUrl)), a.put('"'), a.compile() | |
}; | |
d.blocks.relatedThreads = function (f, c) { | |
var a = new d.Builder, | |
h = DISQUS.extend({}, f, c); | |
with(h) return a.put('<div id="discovery-main"> <div id="discovery-note" style="display:none;"> <div class="alert"> '), a.put(d.interpolate(gettext("The new DISQUS Discovery box helps you find other vibrant discussions on the communities you love. Feedback? %(letUsKnow)s"), { | |
letUsKnow: d.renderBlock("letUsKnow") | |
})), a.put(' </div> </div> <header> <div id="discovery-options"> <span class="publisher-anchor-color"><a href="#" id="discovery-help" data-action="discovery-help">'), a.put(gettext("What's this?")), a.put('</a></span> <a href="#" id="discovery-close" data-action="discovery-close" title="'), a.put(gettext("Close this box")), a.put('">\u00d7</a> </div> <h2>'), a.put(d.interpolate(gettext("Also on %(forumName)s"), { | |
forumName: d.renderBlock("forumName", forum) | |
})), a.put('</h2> </header> <section> <ul id="discovery-units"> '), a.put(" </ul> </section></div>"), a.compile() | |
}; | |
d.blocks.forumName = function (f, c) { | |
var a = new d.Builder, | |
h = DISQUS.extend({}, f, c); | |
with(h) return a.put("<strong>"), a.put((a.esc || function (a) { | |
return a | |
})(name)), a.put("</strong>"), a.compile() | |
} | |
}); | |
(function (d) { | |
var f = d.document, | |
c = d.DISQUS; | |
c.registerActions = function () { | |
c.define("discovery.views", function () { | |
return { | |
load: function (a) { | |
var d = c.discovery.views, | |
e = d.RelatedThreadView = Backbone.View.extend({ | |
events: { | |
"click [data-redirect]": "swapLink" | |
}, | |
dtplBlock: "relatedThread", | |
initialize: function (a) { | |
this.snippetLimit = a.snippetLimit; | |
this.model.on("change:topComment", this.renderTopComment, this) | |
}, | |
swapLink: function (a) { | |
a = a.target || a.srcElement; | |
a.tagName.toUpperCase() == "A" && a.getAttribute("data-redirect") || (a = $(a).closest("a[data-redirect]")[0]); | |
var b = a; | |
b.setAttribute("data-href", b.getAttribute("href")); | |
b.setAttribute("href", b.getAttribute("data-redirect")); | |
_.delay(function () { | |
b.setAttribute("href", b.getAttribute("data-href")) | |
}, 100) | |
}, | |
renderAvatar: function (a) { | |
var b = this.$el.find("[data-role=discovery-avatar]"); | |
b.attr("src", a.avatar.cache); | |
b.attr("alt", this.authorName(a)); | |
return this | |
}, | |
authorName: function (a) { | |
return a.name || a.username | |
}, | |
renderCommentSnippet: function (j) { | |
var b = this.$el.find("[data-role=discovery-top-comment]"); | |
if (j.author) { | |
var c = this.authorName(j.author); | |
b.find("[data-role=discovery-top-comment-author]").text(c) | |
} | |
j = _.strip(j.message); | |
j = _.truncate(j, this.snippetLimit, "\u2026"); | |
c = b.find("[data-role=discovery-top-comment-snippet]"); | |
c.text(j); | |
b.css({ | |
display: "block" | |
}); | |
a.lineTruncate(c, { | |
lines: 3, | |
ellipsis: !0 | |
}); | |
return this | |
}, | |
renderTopComment: function (a, b) { | |
this.renderAvatar(b.author); | |
this.renderCommentSnippet(b); | |
this.trigger("resize"); | |
return this | |
}, | |
truncateHeading: function () { | |
var j = this.$el.find("[data-role=discovery-thread-title]"); | |
a.lineTruncate(j, { | |
lines: 2, | |
ellipsis: !0 | |
}) | |
}, | |
render: function () { | |
this.setElement(c.renderBlock(this.dtplBlock, { | |
thread: _.extend(this.model.toJSON(), { | |
createdAgo: moment(c.assureOffset(this.model.get("createdAt")), c.ISO_8601).fromNow() | |
}) | |
})); | |
return this | |
} | |
}); | |
d.RelatedThreadCollectionView = Backbone.View.extend({ | |
events: { | |
"click [data-action=discovery-close]": "close", | |
"click [data-action=discovery-help]": "showHelp" | |
}, | |
dtplBlock: "relatedThreads", | |
initialize: function (a) { | |
this.snippetLimit = a.snippetLimit | |
}, | |
close: function (a) { | |
a.preventDefault(); | |
this.remove(); | |
this.trigger("resize", 0) | |
}, | |
showHelp: function (a) { | |
a.preventDefault(); | |
$(a.currentTarget).hide(); | |
this.$el.find("#discovery-note").show(); | |
this.trigger("resize") | |
}, | |
getTopComment: function (a) { | |
var b = this; | |
c.api.call("discovery/listTopPost.json", { | |
method: "GET", | |
data: { | |
thread: a | |
}, | |
success: function (a) { | |
a.response.length !== 0 && _.each(a.response, function (a) { | |
b.collection.get(a.thread).set("topComment", a) | |
}) | |
} | |
}); | |
return b | |
}, | |
resize: _.debounce(function () { | |
this.trigger("resize") | |
}, 500), | |
render: function () { | |
this.$el.append(c.renderBlock(this.dtplBlock, { | |
forum: this.collection.mainThread.get("forum") | |
})); | |
var a = []; | |
this.collection.each(function (b) { | |
b = new e({ | |
model: b, | |
snippetLimit: this.snippetLimit | |
}); | |
a.push(b); | |
b.on("resize", this.resize, this); | |
b.render(); | |
this.$el.find("section > ul").append(b.el) | |
}, this); | |
_.each(a, function (a) { | |
a.truncateHeading() | |
}); | |
this.getTopComment(this.collection.pluck("id")); | |
return this | |
} | |
}); | |
return d | |
} | |
} | |
}); | |
c.define("discovery.collections", function () { | |
return { | |
load: function (a, d) { | |
var e = c.discovery.collections; | |
e.RelatedThreadCollection = Backbone.Collection.extend({ | |
model: a.RelatedThread, | |
url: function () { | |
return c.api.getURL("discovery/listRelated.json") | |
}, | |
initialize: function (a, b) { | |
this.mainThread = b.thread; | |
this.limit = b.limit; | |
this.variant = b.variant | |
}, | |
fetch: function (a) { | |
var b = {}; | |
b.data = { | |
thread: this.mainThread.get("id") | |
}; | |
b.parse = !1; | |
_.extend(b, a); | |
Backbone.Collection.prototype.fetch.call(this, b) | |
}, | |
addBandit: function (a) { | |
if ((a = a.response) && a.bandit) this.bandit = a.bandit | |
}, | |
getBanditJSON: _.memoize(function () { | |
return c.JSON.stringify(this.bandit) | |
}), | |
parse: function (a) { | |
this.addBandit(a); | |
var b = [], | |
e = a.response || []; | |
if (e.results) e = e.results; | |
var f = d.log; | |
f("Results (", e.length, "):", e); | |
for (var g = 0, m = e.length; g < m && b.length < this.limit; g++) if (a = e[g].thread || e[g], a.id != this.mainThread.id) if (a.forum.id != this.mainThread.get("forum").id) f("Thread", a.id, "does not have same forum (", a.forum.id, ") as source thread's:", this.mainThread.get("forum").id); | |
else if (a.posts === 0) f("Thread", a.id, "does not have any comments."); | |
else if (a.title.indexOf("http://") === 0) f("Thread", a.id, "has a title that starts with http."); | |
else { | |
var n = e[g].signedUrl ? "http://redirect.disqus.com/url" : a.link + "#redirect", | |
r = { | |
url: e[g].signedUrl, | |
thread: a.id, | |
forum: _.isObject(a.forum) ? a.forum.id : a.forum, | |
zone: "internal_discovery", | |
imp: c.juggler.impId, | |
source_thread_id: this.mainThread.id | |
}; | |
if (this.bandit) r.bandit = this.getBanditJSON(); | |
if (this.variant) r.variant = this.variant; | |
a.redirectUrl = c.serialize(n, r); | |
a.score = { | |
score: e[g].score, | |
k: e[g].k | |
}; | |
b.push(a) | |
} | |
f("Total results:", b.length); | |
return b | |
} | |
}); | |
return e | |
} | |
} | |
}); | |
c.define("discovery.models", function () { | |
return { | |
load: function () { | |
var a = c.discovery.models, | |
d = a.Thread = Backbone.Model.extend({ | |
defaults: { | |
author: null, | |
category: null, | |
createdAt: null, | |
forum: null, | |
identifiers: [], | |
ipAddress: null, | |
isClosed: !1, | |
isDeleted: !1, | |
link: null, | |
message: null, | |
slug: null, | |
title: null, | |
userSubscription: !1, | |
posts: 0, | |
reactions: 0, | |
likes: 0, | |
dislikes: 0, | |
userScore: 0 | |
}, | |
url: c.api.getURL("threads/details"), | |
parse: function (a) { | |
return a.response | |
} | |
}); | |
a.RelatedThread = d.extend({ | |
defaults: _.extend({}, d.prototype.defaults, { | |
redirectUrl: null, | |
topComment: null | |
}) | |
}); | |
return a | |
} | |
} | |
}); | |
c.define("discovery.helpers", | |
function (a, d) { | |
var e = null, | |
j = !1, | |
b = !1, | |
i = function () {}; | |
a.console && (i = function () { | |
b && (a.console.log.apply ? a.console.log.apply(a.console, arguments) : a.console.log(_.toArray(arguments).join(" "))) | |
}); | |
var l = function (a) { | |
if (a === d) return b; | |
b = !! a | |
}, g = function (a) { | |
if (a === d) return j; | |
j = !! a | |
}, m = function (a, b, c) { | |
if (e) if (e.length) e.enabled(a) && b(); | |
else { | |
var d = function () { | |
e.enabled(a) && b(); | |
c && e.off("reset", d) | |
}; | |
return void e.on("reset", d) | |
} | |
}; | |
return { | |
config: function (a) { | |
e = a; | |
g(!0); | |
m("discovery_next:logging", function () { | |
l(!0) | |
}) | |
}, | |
allowLog: l, | |
ifSwitch: m, | |
log: i, | |
allowLineTruncate: g, | |
lineTruncate: function (b, d) { | |
function e() { | |
return i.scrollHeight - i.offsetHeight > 0.2 * t | |
} | |
function g() { | |
k.lastChild && !_.contains(["...", "\u2026"], k.lastChild.nodeValue) && (l = k.appendChild(a.document.createTextNode(" " + m)), e() && (k.removeChild(l), k.removeChild(k.lastChild), g())) | |
} | |
if (j) { | |
var h = c.logError || function () {}; | |
if (!b.closest("body").length) return void h("lineTruncate called on el not on DOM"); | |
if (b.text().length < 1) return void h("lineTruncated called on empty el"); | |
if (_.any(b.children(), | |
function (a) { | |
return a.nodeType !== 3 | |
})) return void h("lineTruncate called on non-flat el"); | |
var k = b[0], | |
i = k; | |
if (b.css("display") !== "block") for (; i.parentNode;) if (i = i.parentNode, $(i).css("display") === "block") break; | |
var t = parseFloat(b.css("font-size"), 10); | |
if (e()) { | |
var d = d || {}, h = d.lines || 1, | |
m = d.ellipsis, | |
l, o = b.text(); | |
if (o.length) { | |
var s = b.width() / t, | |
h = parseInt(s * h, 10), | |
o = o.split(/\s/), | |
s = 0; | |
b.empty(); | |
for (var q = 0, v = o.length; q < v; q++) { | |
s += o[q].length + 1; | |
if (s >= h) break; | |
k.appendChild(f.createTextNode(" " + o[q])) | |
} | |
if (e()) { | |
do l = k.removeChild(k.lastChild); | |
while (e()) | |
} else { | |
do l = k.appendChild(f.createTextNode(" " + o[q++])); | |
while (!e() && q < v); | |
k.removeChild(l) | |
} | |
m && (_.isString(m) || (m = "\u2026"), g()) | |
} | |
} | |
} | |
} | |
} | |
}); | |
c.define("discovery", function () { | |
return this.overwrites({ | |
init: function (a, d) { | |
function e(d) { | |
l("discovery_next:dark_promoted", function () { | |
g("Initiating dark request to discovery/listPromoted"); | |
c.api.call("discovery/listPromoted.json", { | |
data: { | |
thread: a.thread.id | |
} | |
}) | |
}); | |
p.mainThread = d; | |
p.fetch({ | |
success: j, | |
error: b | |
}); | |
p.on("error", b) | |
} | |
function j(c) { | |
if (c.length < 2) return void b({ | |
display: !1 | |
}); | |
c.length % 2 === 1 && c.pop(); | |
c = new w({ | |
el: f.getElementById(a.containerId), | |
collection: c, | |
snippetLimit: m | |
}); | |
d(c); | |
b({ | |
display: !0 | |
}) | |
} | |
function b(b) { | |
b = b || {}; | |
if (!u) { | |
u = !0; | |
var d = c.juggler.client("juggler"); | |
if (d) { | |
var e = { | |
major_version: "next_internal", | |
internal_organic: p.length, | |
external_organic: 0, | |
promoted: 0, | |
display: !! b.display | |
}; | |
p.bandit && _.extend(e, { | |
bandit: c.JSON.stringify(p.bandit) | |
}); | |
a.isExperiment && _.extend(e, { | |
variant: a.variant | |
}); | |
g("Juggler init_discovery", e); | |
d.emit("init_discovery", e); | |
l("dark_jester", | |
function () { | |
c.juggler.client("jester", !0).emit("init_discovery", e) | |
}) | |
} | |
} | |
} | |
var i = c.discovery.helpers, | |
l = i.ifSwitch, | |
g = i.log; | |
i.config(a.switches); | |
var m = 100, | |
n = c.discovery.models.load(), | |
r = c.discovery.collections.load(n, i), | |
i = c.discovery.views.load(i), | |
n = n.Thread, | |
w = i.RelatedThreadCollectionView, | |
p = new r.RelatedThreadCollection(null, { | |
limit: 4, | |
variant: !! a.isExperiment && a.variant | |
}); | |
a.threadId ? (g("Discovery: Making call to threads/details"), (new n).fetch({ | |
data: { | |
thread: a.threadId, | |
forum: a.forum, | |
related: "forum" | |
}, | |
success: e | |
})) : e(new n(_.extend(a.thread, { | |
forum: a.forum | |
}))); | |
var u = !1 | |
} | |
}) | |
}) | |
}; | |
c.runThemeScript = c.registerActions | |
})(this); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment