PageRenderTime 67ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/twitter/widgets.js

http://github.com/jterrace/js.js
JavaScript | 1637 lines | 1637 code | 0 blank | 0 comment | 409 complexity | 771e6f26c627bacf2ce2217e7c41091b MD5 | raw file
Possible License(s): BSD-3-Clause
  1. if (!window.__twttrlr) {
  2. (function(a, b) {
  3. function s(a) {
  4. for (var b = 1, c; c = arguments[b]; b++) for (var d in c) a[d] = c[d];
  5. return a
  6. }
  7. function t(a) {
  8. return Array.prototype.slice.call(a)
  9. }
  10. function v(a, b) {
  11. for (var c = 0, d; d = a[c]; c++) if (b == d) return c;
  12. return -1
  13. }
  14. function w() {
  15. var a = t(arguments),
  16. b = [];
  17. for (var c = 0, d = a.length; c < d; c++) a[c].length > 0 && b.push(a[c].replace(/\/$/, ""));
  18. return b.join("/")
  19. }
  20. function x(a, b, c) {
  21. var d = b.split("/"),
  22. e = a;
  23. while (d.length > 1) {
  24. var f = d.shift();
  25. e = e[f] = e[f] || {}
  26. }
  27. e[d[0]] = c
  28. }
  29. function y() {}
  30. function z(a, b) {
  31. this.id = this.path = a, this.force = !! b
  32. }
  33. function A(a, b) {
  34. this.id = a, this.body = b, typeof b == "undefined" && (this.path = this.resolvePath(a))
  35. }
  36. function B(a, b) {
  37. this.deps = a, this.collectResults = b, this.deps.length == 0 && this.complete()
  38. }
  39. function C(a, b) {
  40. this.deps = a, this.collectResults = b
  41. }
  42. function D() {
  43. for (var a in d) if (d[a].readyState == "interactive") return l[d[a].id]
  44. }
  45. function E(a, b) {
  46. var d;
  47. return !a && c && (d = k || D()), d ? (delete l[d.scriptId], d.body = b, d.execute()) : (j = d = new A(a, b), i[d.id] = d), d
  48. }
  49. function F() {
  50. var a = t(arguments),
  51. b, c;
  52. return typeof a[0] == "string" && (b = a.shift()), c = a.shift(), E(b, c)
  53. }
  54. function G(a, b) {
  55. var c = b.id || "",
  56. d = c.split("/");
  57. d.pop();
  58. var e = d.join("/");
  59. return a.replace(/^\./, e)
  60. }
  61. function H(a, b) {
  62. function d(a) {
  63. return A.exports[G(a, b)]
  64. }
  65. var c = [];
  66. for (var e = 0, f = a.length; e < f; e++) {
  67. if (a[e] == "require") {
  68. c.push(d);
  69. continue
  70. }
  71. if (a[e] == "exports") {
  72. b.exports = b.exports || {}, c.push(b.exports);
  73. continue
  74. }
  75. c.push(d(a[e]))
  76. }
  77. return c
  78. }
  79. function I() {
  80. var a = t(arguments),
  81. b = [],
  82. c, d;
  83. return typeof a[0] == "string" && (c = a.shift()), u(a[0]) && (b = a.shift()), d = a.shift(), E(c, function(a) {
  84. function f() {
  85. var e = H(t(b), c),
  86. f;
  87. typeof d == "function" ? f = d.apply(c, e) : f = d, typeof f == "undefined" && (f = c.exports), a(f)
  88. }
  89. var c = this,
  90. e = [];
  91. for (var g = 0, h = b.length; g < h; g++) {
  92. var i = b[g];
  93. v(["require", "exports"], i) == -1 && e.push(G(i, c))
  94. }
  95. e.length > 0 ? J.apply(this, e.concat(f)) : f()
  96. })
  97. }
  98. function J() {
  99. var a = t(arguments),
  100. b, c;
  101. typeof a[a.length - 1] == "function" && (b = a.pop()), typeof a[a.length - 1] == "boolean" && (c = a.pop());
  102. var d = new B(K(a, c), c);
  103. return b && d.then(b), d
  104. }
  105. function K(a, b) {
  106. var c = [];
  107. for (var d = 0, e; e = a[d]; d++) typeof e == "string" && (e = L(e)), u(e) && (e = new C(K(e, b), b)), c.push(e);
  108. return c
  109. }
  110. function L(a) {
  111. var b, c;
  112. for (var d = 0, e; e = J.matchers[d]; d++) {
  113. var f = e[0],
  114. g = e[1];
  115. if (b = a.match(f)) return g(a)
  116. }
  117. throw new Error(a + " was not recognised by loader")
  118. }
  119. function N() {
  120. return a.using = m, a.provide = n, a.define = o, a.loadrunner = p, M
  121. }
  122. function O(a) {
  123. for (var b = 0; b < J.bundles.length; b++) for (var c in J.bundles[b]) if (c != a && v(J.bundles[b][c], a) > -1) return c
  124. }
  125. var c = a.attachEvent && !a.opera,
  126. d = b.getElementsByTagName("script"),
  127. e = 0,
  128. f, g = b.createElement("script"),
  129. h = {},
  130. i = {},
  131. j, k, l = {},
  132. m = a.using,
  133. n = a.provide,
  134. o = a.define,
  135. p = a.loadrunner;
  136. for (var q = 0, r; r = d[q]; q++) if (r.src.match(/loadrunner\.js(\?|#|$)/)) {
  137. f = r;
  138. break
  139. }
  140. var u = Array.isArray ||
  141. function(a) {
  142. return a.constructor == Array
  143. };
  144. y.prototype.then = function(b) {
  145. var c = this;
  146. return this.started || (this.started = !0, this.start()), this.completed ? b.apply(a, this.results) : (this.callbacks = this.callbacks || [], this.callbacks.push(b)), this
  147. }, y.prototype.start = function() {}, y.prototype.complete = function() {
  148. if (!this.completed) {
  149. this.results = t(arguments), this.completed = !0;
  150. if (this.callbacks) for (var b = 0, c; c = this.callbacks[b]; b++) c.apply(a, this.results)
  151. }
  152. }, z.loaded = [], z.prototype = new y, z.prototype.start = function() {
  153. var a = this,
  154. b, c, d;
  155. return (d = i[this.id]) ? (d.then(function() {
  156. a.complete()
  157. }), this) : ((b = h[this.id]) ? b.then(function() {
  158. a.loaded()
  159. }) : !this.force && v(z.loaded, this.id) > -1 ? this.loaded() : (c = O(this.id)) ? J(c, function() {
  160. a.loaded()
  161. }) : this.load(), this)
  162. }, z.prototype.load = function() {
  163. var b = this;
  164. h[this.id] = b;
  165. var c = g.cloneNode(!1);
  166. this.scriptId = c.id = "LR" + ++e, c.type = "text/javascript", c.async = !0, c.onerror = function() {
  167. throw new Error(b.path + " not loaded")
  168. }, c.onreadystatechange = c.onload = function(c) {
  169. c = a.event || c;
  170. if (c.type == "load" || v(["loaded", "complete"], this.readyState) > -1) this.onreadystatechange = null, b.loaded()
  171. }, c.src = this.path, k = this, d[0].parentNode.insertBefore(c, d[0]), k = null, l[c.id] = this
  172. }, z.prototype.loaded = function() {
  173. this.complete()
  174. }, z.prototype.complete = function() {
  175. v(z.loaded, this.id) == -1 && z.loaded.push(this.id), delete h[this.id], y.prototype.complete.apply(this, arguments)
  176. }, A.exports = {}, A.prototype = new z, A.prototype.resolvePath = function(a) {
  177. return w(J.path, a + ".js")
  178. }, A.prototype.start = function() {
  179. var a, b, c = this,
  180. d;
  181. this.body ? this.execute() : (a = A.exports[this.id]) ? this.exp(a) : (b = i[this.id]) ? b.then(function(a) {
  182. c.exp(a)
  183. }) : (bundle = O(this.id)) ? J(bundle, function() {
  184. c.start()
  185. }) : (i[this.id] = this, this.load())
  186. }, A.prototype.loaded = function() {
  187. var a, b, d = this;
  188. c ? (b = A.exports[this.id]) ? this.exp(b) : (a = i[this.id]) && a.then(function(a) {
  189. d.exp(a)
  190. }) : (a = j, j = null, a.id = a.id || this.id, a.then(function(a) {
  191. d.exp(a)
  192. }))
  193. }, A.prototype.complete = function() {
  194. delete i[this.id], z.prototype.complete.apply(this, arguments)
  195. }, A.prototype.execute = function() {
  196. var a = this;
  197. typeof this.body == "object" ? this.exp(this.body) : typeof this.body == "function" && this.body.apply(window, [function(b) {
  198. a.exp(b)
  199. }])
  200. }, A.prototype.exp = function(a) {
  201. this.complete(this.exports = A.exports[this.id] = a || {})
  202. }, B.prototype = new y, B.prototype.start = function() {
  203. function b() {
  204. var b = [];
  205. a.collectResults && (b[0] = {});
  206. for (var c = 0, d; d = a.deps[c]; c++) {
  207. if (!d.completed) return;
  208. d.results.length > 0 && (a.collectResults ? d instanceof C ? s(b[0], d.results[0]) : x(b[0], d.id, d.results[0]) : b = b.concat(d.results))
  209. }
  210. a.complete.apply(a, b)
  211. }
  212. var a = this;
  213. for (var c = 0, d; d = this.deps[c]; c++) d.then(b);
  214. return this
  215. }, C.prototype = new y, C.prototype.start = function() {
  216. var a = this,
  217. b = 0,
  218. c = [];
  219. return a.collectResults && (c[0] = {}), function d() {
  220. var e = a.deps[b++];
  221. e ? e.then(function(b) {
  222. e.results.length > 0 && (a.collectResults ? e instanceof C ? s(c[0], e.results[0]) : x(c[0], e.id, e.results[0]) : c.push(e.results[0])), d()
  223. }) : a.complete.apply(a, c)
  224. }(), this
  225. }, I.amd = {};
  226. var M = function(a) {
  227. return a(J, F, M, define)
  228. };
  229. M.Script = z, M.Module = A, M.Collection = B, M.Sequence = C, M.Dependency = y, M.noConflict = N, a.loadrunner = M, a.using = J, a.provide = F, a.define = I, J.path = "", J.matchers = [], J.matchers.add = function(a, b) {
  230. this.unshift([a, b])
  231. }, J.matchers.add(/(^script!|\.js$)/, function(a) {
  232. var b = new z(a.replace(/^\$/, J.path.replace(/\/$/, "") + "/").replace(/^script!/, ""), !1);
  233. return b.id = a, b
  234. }), J.matchers.add(/^[a-zA-Z0-9_\-\/]+$/, function(a) {
  235. return new A(a)
  236. }), J.bundles = [], f && (J.path = f.getAttribute("data-path") || f.src.split(/loadrunner\.js/)[0] || "", (main = f.getAttribute("data-main")) && J.apply(a, main.split(/\s*,\s*/)).then(function() {}))
  237. })(this, document);
  238. (window.__twttrlr = loadrunner.noConflict());
  239. }
  240. __twttrlr(function(using, provide, loadrunner, define) {
  241. provide("util/iframe", function(a) {
  242. a(function(a) {
  243. var b = document.createElement("div"),
  244. c;
  245. b.innerHTML = "<iframe allowtransparency='true' frameborder='0' scrolling='no'></iframe>", c = b.firstChild, c.src = a.url, c.className = a.className || "";
  246. if (a.css) for (var d in a.css) c.style[d] = a.css[d];
  247. if (a.attributes) for (var e in a.attributes) c.setAttribute(e, a.attributes[e]);
  248. return a.replace ? a.replace.parentNode.replaceChild(c, a.replace) : document.body.insertBefore(c, document.body.firstChild), c
  249. })
  250. });
  251. provide("util/querystring", function(a) {
  252. function b(a) {
  253. return encodeURIComponent(a).replace(/\+/g, "%2B")
  254. }
  255. function c(a) {
  256. return decodeURIComponent(a)
  257. }
  258. function d(a) {
  259. var c = [];
  260. for (var d in a) a[d] !== null && typeof a[d] != "undefined" && c.push(b(d) + "=" + b(a[d]));
  261. return c.sort().join("&")
  262. }
  263. function e(a) {
  264. var b = {},
  265. d, e, f, g;
  266. if (a) {
  267. d = a.split("&");
  268. for (g = 0; f = d[g]; g++) e = f.split("="), e.length == 2 && (b[c(e[0])] = c(e[1]))
  269. }
  270. return b
  271. }
  272. function f(a, b) {
  273. var c = d(b);
  274. return c.length > 0 ? a.indexOf("?") >= 0 ? a + "&" + d(b) : a + "?" + d(b) : a
  275. }
  276. a({
  277. url: f,
  278. decode: e,
  279. encode: d,
  280. encodePart: b,
  281. decodePart: c
  282. })
  283. });
  284. provide("util/nodeselect", function(a) {
  285. var b = document,
  286. c = "querySelectorAll" in b ?
  287. function(a, c) {
  288. return b.querySelectorAll(a + "." + c)
  289. } : "getElementsByClassName" in b ?
  290. function(a, c) {
  291. var d = b.getElementsByClassName(c),
  292. e, f = [];
  293. for (i = 0; e = d[i]; i++) e.tagName.toLowerCase() == a && f.push(e);
  294. return f
  295. } : function(a, c) {
  296. var d = b.getElementsByTagName(a),
  297. e, f = new RegExp("(?:^|\\s+)" + c + "(?:\\s+|$)"),
  298. g = [];
  299. for (i = 0; e = d[i]; i++) f.test(e.className) && g.push(e);
  300. return g
  301. };
  302. a(c)
  303. });
  304. provide("$vendor/domready/ready.js", function(exports) {
  305. !
  306. function(a) {
  307. function k() {
  308. b = 1;
  309. for (var a = 0, d = c.length; a < d; a++) c[a]()
  310. }
  311. var b = 0,
  312. c = [],
  313. d, e, f = !1,
  314. g = a.createElement("a"),
  315. h = "DOMContentLoaded",
  316. i = "addEventListener",
  317. j = "onreadystatechange";
  318. /^loade|c/.test(a.readyState) && (b = 1), a[i] && a[i](h, e = function() {
  319. a.removeEventListener(h, e, f), k()
  320. }, f), g.doScroll && a.attachEvent(j, d = function() {
  321. /^c/.test(a.readyState) && (a.detachEvent(j, d), k())
  322. });
  323. var l = g.doScroll ?
  324. function(a) {
  325. self != top ? b ? a() : c.push(a) : !
  326. function() {
  327. try {
  328. g.doScroll("left")
  329. } catch (b) {
  330. return setTimeout(function() {
  331. l(a)
  332. }, 50)
  333. }
  334. a()
  335. }()
  336. } : function(a) {
  337. b ? a() : c.push(a)
  338. };
  339. typeof module != "undefined" && module.exports ? module.exports = {
  340. domReady: l
  341. } : window.domReady = l
  342. }(document);
  343. exports();
  344. loadrunner.Script.loaded.push("$vendor/domready/ready.js")
  345. });
  346. provide("util/domready", function(a) {
  347. using("$vendor/domready/ready.js", function() {
  348. a(domReady)
  349. })
  350. });
  351. provide("util/util", function(a) {
  352. function b(a) {
  353. for (var b = 1, c; c = arguments[b]; b++) for (var d in c) a[d] = c[d];
  354. return a
  355. }
  356. function c(a) {
  357. return b([], a)
  358. }
  359. function d(a) {
  360. for (var b in a) a.hasOwnProperty(b) && !a[b] && a[b] !== !1 && a[b] !== 0 && delete a[b]
  361. }
  362. function e(a, b) {
  363. if (a.indexOf) return a.indexOf(b);
  364. for (var c = 0, d; d = a[c]; c++) if (b == d) return c;
  365. return -1
  366. }
  367. function f(a, b) {
  368. if (!a) return null;
  369. if (!b) return a;
  370. if (a.filter) return a.filter(b);
  371. var c = [],
  372. d = 0,
  373. e = a.length;
  374. for (; d < e; d++) b(a[d]) && c.push(a[d]);
  375. return c
  376. }
  377. function g(a, b) {
  378. if (a.contains) return a.contains(b);
  379. var c = b.parentNode;
  380. while (c) {
  381. if (c === a) return !0;
  382. c = c.parentNode
  383. }
  384. return !1
  385. }
  386. a({
  387. aug: b,
  388. array: c,
  389. indexOf: e,
  390. filter: f,
  391. compact: d,
  392. containsElement: g
  393. })
  394. });
  395. provide("tfw/widget/base", function(a) {
  396. using("util/util", "util/domready", "util/nodeselect", "util/querystring", "util/iframe", function(b, c, d, e, f) {
  397. function m(a) {
  398. if (!a) return;
  399. return a.lang ? a.lang : m(a.parentNode)
  400. }
  401. function n() {
  402. var a = i.widgets,
  403. b, c;
  404. for (var e in a) {
  405. e.match(/\./) ? b = d.apply(this, e.split(".")) : b = document.getElementsByTagName(e);
  406. for (var f = 0, g; g = b[f]; f++) {
  407. if (g.getAttribute("data-twttr-rendered")) continue;
  408. g.setAttribute("data-twttr-rendered", "true"), c = new a[e](g), j.list.push(c), j.byId[c.id] = c, c.render(i)
  409. }
  410. }
  411. }
  412. function o(a) {
  413. i = a
  414. }
  415. function p() {
  416. n()
  417. }
  418. function q(a) {
  419. return a && j.byId[a] ? j.byId[a].element : null
  420. }
  421. var g = 0,
  422. h, i, j = {
  423. list: [],
  424. byId: {}
  425. },
  426. k = {
  427. ko: {
  428. "%{followers_count} followers": "%{followers_count}명의 팔로워",
  429. "100K+": "100만 이상",
  430. "10k unit": "만 단위",
  431. Follow: "팔로우",
  432. "Follow %{screen_name}": "%{screen_name} 팔로우하기",
  433. K: "천",
  434. M: "백만",
  435. Tweet: "트윗",
  436. "Tweet %{hashtag}": "%{hashtag} 관련 트윗하기",
  437. "Tweet to %{name}": "%{name}님에게 트윗하기"
  438. },
  439. no: {
  440. "%{followers_count} followers": "%{followers_count} føgere",
  441. "100K+": "100K+",
  442. "10k unit": "10k ",
  443. Follow: "Følg",
  444. "Follow %{screen_name}": "Følg %{screen_name}",
  445. K: "K",
  446. M: "M",
  447. Tweet: "Tweet",
  448. "Tweet %{hashtag}": "Tweet %{hashtag}",
  449. "Tweet to %{name}": "Send tweet til %{name}"
  450. },
  451. fil: {
  452. "%{followers_count} followers": "%{followers_count} mga tagasunod",
  453. "100K+": "100K+",
  454. "10k unit": "10k yunit",
  455. Follow: "Sundan",
  456. "Follow %{screen_name}": "Sundan si %{screen_name}",
  457. K: "K",
  458. M: "M",
  459. Tweet: "I-tweet",
  460. "Tweet %{hashtag}": "I-tweet ang %{hashtag}",
  461. "Tweet to %{name}": "Mag-Tweet kay %{name}"
  462. },
  463. sv: {
  464. "%{followers_count} followers": "%{followers_count} följare",
  465. "100K+": "100K+",
  466. "10k unit": "10k",
  467. Follow: "Följ",
  468. "Follow %{screen_name}": "Följ %{screen_name}",
  469. K: "K",
  470. M: "M",
  471. Tweet: "Tweeta",
  472. "Tweet %{hashtag}": "Tweeta %{hashtag}",
  473. "Tweet to %{name}": "Tweeta till %{name}"
  474. },
  475. nl: {
  476. "%{followers_count} followers": "%{followers_count} volgers",
  477. "100K+": "100k+",
  478. "10k unit": "10k-eenheid",
  479. Follow: "Volgen",
  480. "Follow %{screen_name}": "%{screen_name} volgen",
  481. K: "k",
  482. M: " mln.",
  483. Tweet: "Tweeten",
  484. "Tweet %{hashtag}": "%{hashtag} tweeten",
  485. "Tweet to %{name}": "Tweeten naar %{name}"
  486. },
  487. es: {
  488. "%{followers_count} followers": "%{followers_count} seguidores",
  489. "100K+": "100K+",
  490. "10k unit": "10k unidad",
  491. Follow: "Seguir",
  492. "Follow %{screen_name}": "Seguir a %{screen_name}",
  493. K: "K",
  494. M: "M",
  495. Tweet: "Twittear",
  496. "Tweet %{hashtag}": "Twittear %{hashtag}",
  497. "Tweet to %{name}": "Twittear a %{name}"
  498. },
  499. hu: {
  500. "%{followers_count} followers": "%{followers_count} követő",
  501. "100K+": "100E+",
  502. "10k unit": "10E+",
  503. Follow: "Követés",
  504. "Follow %{screen_name}": "%{screen_name} követése",
  505. K: "E",
  506. M: "M",
  507. Tweet: "Tweet",
  508. "Tweet %{hashtag}": "%{hashtag} tweetelése",
  509. "Tweet to %{name}": "Tweet küldése neki: %{name}"
  510. },
  511. hi: {
  512. "%{followers_count} followers": "%{followers_count} फ़ॉलोअर्स",
  513. "100K+": "१०० हजार+",
  514. "10k unit": "१० हजार इकाईयां",
  515. Follow: "फ़ॉलो",
  516. "Follow %{screen_name}": "%{screen_name} को फ़ॉलो करें",
  517. K: "हजार",
  518. M: "१० लाख",
  519. Tweet: "ट्वीट",
  520. "Tweet %{hashtag}": "ट्वीट %{hashtag}",
  521. "Tweet to %{name}": "%{name} को ट्वीट करें"
  522. },
  523. ja: {
  524. "%{followers_count} followers": "%{followers_count}人のフォロワー",
  525. "100K+": "10万以上",
  526. "10k unit": "万",
  527. Follow: "フォローする",
  528. "Follow %{screen_name}": "%{screen_name}をフォロー",
  529. K: "K",
  530. M: "M",
  531. Tweet: "ツイート",
  532. "Tweet %{hashtag}": "%{hashtag} をツイートする",
  533. "Tweet to %{name}": "%{name}へツイートする"
  534. },
  535. da: {
  536. "%{followers_count} followers": "%{followers_count} følgere",
  537. "100K+": "100K+",
  538. "10k unit": "10k enhed",
  539. Follow: "Følg",
  540. "Follow %{screen_name}": "Følg %{screen_name}",
  541. K: "K",
  542. M: "M",
  543. Tweet: "Tweet",
  544. "Tweet %{hashtag}": "Tweet %{hashtag}",
  545. "Tweet to %{name}": "Tweet til %{name}"
  546. },
  547. ur: {
  548. "%{followers_count} followers": "%{followers_count} فالورز",
  549. "100K+": "1 لاکھ+",
  550. "10k unit": "دس ہزار یونٹ",
  551. Follow: "فالو کریں",
  552. "Follow %{screen_name}": "%{screen_name} کو فالو کریں",
  553. K: "ہزار",
  554. M: "ملین",
  555. Tweet: "ٹویٹ کریں",
  556. "Tweet %{hashtag}": "ٹویٹ کریں %{hashtag}",
  557. "Tweet to %{name}": "%{name} کو ٹویٹ کریں"
  558. },
  559. he: {
  560. "%{followers_count} followers": "%{followers_count} עוקבים",
  561. "100K+": "מאות אלפים",
  562. "10k unit": "עשרות אלפים",
  563. Follow: "מעקב",
  564. "Follow %{screen_name}": "לעקוב אחר %{screen_name}",
  565. K: "אלף",
  566. M: "מיליון",
  567. Tweet: "ציוץ",
  568. "Tweet %{hashtag}": "צייצו %{hashtag}",
  569. "Tweet to %{name}": "ציוץ אל %{name}"
  570. },
  571. pt: {
  572. "%{followers_count} followers": "%{followers_count} seguidores",
  573. "100K+": "+100 mil",
  574. "10k unit": "10 mil unidades",
  575. Follow: "Seguir",
  576. "Follow %{screen_name}": "Seguir %{screen_name}",
  577. K: "Mil",
  578. M: "M",
  579. Tweet: "Tweetar",
  580. "Tweet %{hashtag}": "Tweetar %{hashtag}",
  581. "Tweet to %{name}": "Tweetar para %{name}"
  582. },
  583. ru: {
  584. "%{followers_count} followers": "Читатели: %{followers_count} ",
  585. "100K+": "100 тыс.+",
  586. "10k unit": "блок 10k",
  587. Follow: "Читать",
  588. "Follow %{screen_name}": "Читать %{screen_name}",
  589. K: "тыс.",
  590. M: "млн.",
  591. Tweet: "Твитнуть",
  592. "Tweet %{hashtag}": "Твитнуть %{hashtag}",
  593. "Tweet to %{name}": "Твитнуть %{name}"
  594. },
  595. "zh-cn": {
  596. "%{followers_count} followers": "%{followers_count} 关注者",
  597. "100K+": "10万+",
  598. "10k unit": "1万单元",
  599. Follow: "关注",
  600. "Follow %{screen_name}": "关注 %{screen_name}",
  601. K: "千",
  602. M: "百万",
  603. Tweet: "发推",
  604. "Tweet %{hashtag}": "以 %{hashtag} 发推",
  605. "Tweet to %{name}": "发推给 %{name}"
  606. },
  607. "zh-tw": {
  608. "%{followers_count} followers": "%{followers_count} 位跟隨者",
  609. "100K+": "超過十萬",
  610. "10k unit": "1萬 單位",
  611. Follow: "跟隨",
  612. "Follow %{screen_name}": "跟隨 %{screen_name}",
  613. K: "千",
  614. M: "百萬",
  615. Tweet: "推文",
  616. "Tweet %{hashtag}": "推文%{hashtag}",
  617. "Tweet to %{name}": "推文給%{name}"
  618. },
  619. ar: {
  620. "%{followers_count} followers": "عدد المتابعين %{followers_count}",
  621. "100K+": "+100 ألف",
  622. "10k unit": "10 آلاف وحدة",
  623. Follow: "تابع",
  624. "Follow %{screen_name}": "تابع %{screen_name}",
  625. K: "ألف",
  626. M: "مليون",
  627. Tweet: "غرِّد",
  628. "Tweet %{hashtag}": "غرِّد %{hashtag}",
  629. "Tweet to %{name}": "غرِّد لـ %{name}"
  630. },
  631. it: {
  632. "%{followers_count} followers": "%{followers_count} follower",
  633. "100K+": "100K+",
  634. "10k unit": "10k unità",
  635. Follow: "Segui",
  636. "Follow %{screen_name}": "Segui %{screen_name}",
  637. K: "K",
  638. M: "M",
  639. Tweet: "Tweet",
  640. "Tweet %{hashtag}": "Twitta %{hashtag}",
  641. "Tweet to %{name}": "Twitta a %{name}"
  642. },
  643. id: {
  644. "%{followers_count} followers": "%{followers_count} pengikut",
  645. "100K+": "100 ribu+",
  646. "10k unit": "10 ribu unit",
  647. Follow: "Ikuti",
  648. "Follow %{screen_name}": "Ikuti %{screen_name}",
  649. K: "&nbsp;ribu",
  650. M: "&nbsp;juta",
  651. Tweet: "Tweet",
  652. "Tweet %{hashtag}": "Tweet %{hashtag}",
  653. "Tweet to %{name}": "Tweet ke %{name}"
  654. },
  655. tr: {
  656. "%{followers_count} followers": "%{followers_count} takipçi",
  657. "100K+": "+100 bin",
  658. "10k unit": "10 bin birim",
  659. Follow: "Takip et",
  660. "Follow %{screen_name}": "Takip et: %{screen_name}",
  661. K: "bin",
  662. M: "milyon",
  663. Tweet: "Tweetle",
  664. "Tweet %{hashtag}": "Tweetle: %{hashtag}",
  665. "Tweet to %{name}": "Tweetle: %{name}"
  666. },
  667. fr: {
  668. "%{followers_count} followers": "%{followers_count} abonnés",
  669. "100K+": "100K+",
  670. "10k unit": "unité de 10k",
  671. Follow: "Suivre",
  672. "Follow %{screen_name}": "Suivre %{screen_name}",
  673. K: "K",
  674. M: "M",
  675. Tweet: "Tweeter",
  676. "Tweet %{hashtag}": "Tweeter %{hashtag}",
  677. "Tweet to %{name}": "Tweeter à %{name}"
  678. },
  679. fi: {
  680. "%{followers_count} followers": "%{followers_count} seuraajaa",
  681. "100K+": "100 000+",
  682. "10k unit": "10 000 yksikköä",
  683. Follow: "Seuraa",
  684. "Follow %{screen_name}": "Seuraa käyttäjää %{screen_name}",
  685. K: "tuhatta",
  686. M: "milj.",
  687. Tweet: "Twiittaa",
  688. "Tweet %{hashtag}": "Twiittaa %{hashtag}",
  689. "Tweet to %{name}": "Twiittaa käyttäjälle %{name}"
  690. },
  691. fa: {
  692. "%{followers_count} followers": "%{followers_count} دنبال‌کننده",
  693. "100K+": ">۱۰۰هزار",
  694. "10k unit": "۱۰هزار واحد",
  695. Follow: "دنبال کردن",
  696. "Follow %{screen_name}": "دنبال کردن %{screen_name}",
  697. K: "هزار",
  698. M: "میلیون",
  699. Tweet: "توییت",
  700. "Tweet %{hashtag}": "توییت کردن %{hashtag}",
  701. "Tweet to %{name}": "به %{name} توییت کنید"
  702. },
  703. th: {
  704. "%{followers_count} followers": "%{followers_count} ผู้ติดตาม",
  705. "100K+": "100พัน+",
  706. "10k unit": "หน่วย 10พัน",
  707. Follow: "ติดตาม",
  708. "Follow %{screen_name}": "ติดตาม %{screen_name}",
  709. K: "พัน",
  710. M: "ล้าน",
  711. Tweet: "ทวีต",
  712. "Tweet %{hashtag}": "ทวีต %{hashtag}",
  713. "Tweet to %{name}": "ทวีตถึง %{name}"
  714. },
  715. msa: {
  716. "%{followers_count} followers": "%{followers_count} pengikut",
  717. "100K+": "100 ribu+",
  718. "10k unit": "10 ribu unit",
  719. Follow: "Ikut",
  720. "Follow %{screen_name}": "Ikut %{screen_name}",
  721. K: "ribu",
  722. M: "juta",
  723. Tweet: "Tweet",
  724. "Tweet %{hashtag}": "Tweet %{hashtag}",
  725. "Tweet to %{name}": "Tweet kepada %{name}"
  726. },
  727. pl: {
  728. "%{followers_count} followers": "%{followers_count} obserwujących",
  729. "100K+": "100 tys.+",
  730. "10k unit": "10 tys.",
  731. Follow: "Obserwuj",
  732. "Follow %{screen_name}": "Obserwuj %{screen_name}",
  733. K: "tys.",
  734. M: "mln",
  735. Tweet: "Tweetnij",
  736. "Tweet %{hashtag}": "Tweetnij %{hashtag}",
  737. "Tweet to %{name}": "Tweetnij do %{name}"
  738. },
  739. de: {
  740. "%{followers_count} followers": "%{followers_count} Follower",
  741. "100K+": "100Tsd+",
  742. "10k unit": "10tsd-Einheit",
  743. Follow: "Folgen",
  744. "Follow %{screen_name}": "%{screen_name} folgen",
  745. K: "Tsd",
  746. M: "M",
  747. Tweet: "Twittern",
  748. "Tweet %{hashtag}": "Tweet %{hashtag}",
  749. "Tweet to %{name}": "Tweet an %{name}"
  750. }
  751. },
  752. l = function() {};
  753. b.aug(l.prototype, {
  754. setLanguage: function(a) {
  755. var b;
  756. a || (a = this.params().lang || this.originElement.getAttribute("data-lang") || m(this.originElement)), a = a && a.toLowerCase();
  757. if (!a) return this.lang = "en";
  758. if (k[a]) return this.lang = a;
  759. b = a.replace(/[-_].*/, "");
  760. if (k[b]) return this.lang = b;
  761. this.lang = "en"
  762. },
  763. _: function(a, b) {
  764. var c = this.lang;
  765. b = b || {};
  766. if (!c || !k.hasOwnProperty(c)) c = this.lang = "en";
  767. return a = k[c] && k[c][a] || a, this.ringo(a, b, /%\{([\w_]+)\}/g)
  768. },
  769. ringo: function(a, b, c) {
  770. return c = c || /\{\{([\w_]+)\}\}/g, a.replace(c, function(a, c) {
  771. return b[c] !== undefined ? b[c] : a
  772. })
  773. },
  774. add: function(a) {
  775. j.list.push(this), j.byId[this.id] = a
  776. },
  777. create: function(a, b, c, d) {
  778. return this.id = this.generateId(), f({
  779. url: a,
  780. css: {
  781. width: c[0] + (typeof c[0] != "string" ? "px" : ""),
  782. height: c[1] + (typeof c[1] != "string" ? "px" : "")
  783. },
  784. className: b,
  785. id: this.id,
  786. attributes: d,
  787. replace: this.originElement
  788. })
  789. },
  790. params: function() {
  791. var a = this.originElement.href && this.originElement.href.split("?")[1],
  792. b = a ? e.decode(a) : {};
  793. return (this.params = function() {
  794. return b
  795. })()
  796. },
  797. dataAttr: function(a) {
  798. return this.originElement.getAttribute("data-" + a)
  799. },
  800. generateId: function() {
  801. return this.originElement.id || "twitter-widget-" + g++
  802. },
  803. styles: {
  804. base: "font: normal normal normal 11px/18px 'Helvetica Neue', Arial, sans-serif; margin: 0; padding: 0; white-space: nowrap;",
  805. button: "font-weight: bold; text-shadow: 0 1px 0 rgba(255,255,255,.5);",
  806. large: "font-size: 13px; line-height: 26px;",
  807. vbubble: "font-size: 16px;"
  808. },
  809. width: function() {
  810. throw new Error(name + " not implemented")
  811. },
  812. height: function() {
  813. return this.size == "m" ? 20 : 28
  814. },
  815. dimensions: function() {
  816. return [this.width(), this.height()]
  817. }
  818. }), a({
  819. Base: l,
  820. init: o,
  821. embed: p,
  822. find: q,
  823. TWITTER_PROFILE_URL: /^https?\:\/\/(?:www\.)?twitter\.com\/(?:#!?\/)?([\w_]{1,20})\/?$/
  824. })
  825. })
  826. });
  827. provide("util/events", function(a) {
  828. using("util/util", function(b) {
  829. function d() {
  830. this.completed = !1, this.callbacks = []
  831. }
  832. var c = {
  833. bind: function(a, b) {
  834. return this._handlers = this._handlers || {}, this._handlers[a] = this._handlers[a] || [], this._handlers[a].push(b)
  835. },
  836. unbind: function(a, c) {
  837. if (!this._handlers[a]) return;
  838. if (c) {
  839. var d = b.indexOf(this._handlers[a], c);
  840. d >= 0 && this._handlers[a].splice(d, 1)
  841. } else this._handlers[a] = []
  842. },
  843. trigger: function(a, b) {
  844. var c = this._handlers && this._handlers[a];
  845. b.type = a;
  846. if (c) for (var d = 0, e; e = c[d]; d++) e.call(this, b)
  847. }
  848. };
  849. d.prototype.addCallback = function(a) {
  850. this.completed ? a.apply(this, this.results) : this.callbacks.push(a)
  851. }, d.prototype.complete = function() {
  852. this.results = makeArray(arguments), this.completed = !0;
  853. for (var a = 0, b; b = this.callbacks[a]; a++) b.apply(this, this.results)
  854. }, a({
  855. Emitter: c,
  856. Promise: d
  857. })
  858. })
  859. });
  860. provide("util/uri", function(a) {
  861. using("util/querystring", "util/util", function(b, c) {
  862. function d(a) {
  863. var b;
  864. return a.match(/^https?:\/\//) ? a : (b = location.host, location.port.length > 0 && (b += ":" + location.port), [location.protocol, "//", b, a].join(""))
  865. }
  866. function e() {
  867. var a = document.getElementsByTagName("link");
  868. for (var b = 0, c; c = a[b]; b++) if (c.getAttribute("rel") == "canonical") return d(c.getAttribute("href"));
  869. return null
  870. }
  871. function f() {
  872. var a = document.getElementsByTagName("a"),
  873. b = document.getElementsByTagName("link"),
  874. d = /\bme\b/,
  875. e = /^https?\:\/\/(www\.)?twitter.com\/([a-zA-Z0-9_]+)$/,
  876. f = c.array(a).concat(c.array(b)),
  877. g, h, i;
  878. for (var j = 0, k; k = f[j]; j++) {
  879. h = k.getAttribute("rel"), i = k.getAttribute("href");
  880. if (h && i && h.match(d) && (g = i.match(e))) return g[2]
  881. }
  882. }
  883. a({
  884. absolutize: d,
  885. getCanonicalURL: e,
  886. getScreenNameFromPage: f
  887. })
  888. })
  889. });
  890. provide("tfw/widget/intent", function(a) {
  891. using("util/util", "tfw/widget/base", "util/querystring", "util/uri", function(b, c, d, e) {
  892. function m(a) {
  893. var b = Math.round(k / 2 - h / 2),
  894. c = 0;
  895. j > i && (c = Math.round(j / 2 - i / 2)), window.open(a, "intent", g + ",width=" + h + ",height=" + i + ",left=" + b + ",top=" + c)
  896. }
  897. function n(a, b) {
  898. using("tfw/widget/hubclient", function(c) {
  899. c.openIntent(a, b)
  900. })
  901. }
  902. function o(a) {
  903. var b = "original_referer=" + location.href;
  904. return [a, b].join(a.indexOf("?") == -1 ? "?" : "&")
  905. }
  906. function q(a) {
  907. a = a || window.event;
  908. var b = a.target || a.srcElement,
  909. c, d;
  910. while (b && b.nodeName.toLowerCase() !== "a") b = b.parentNode;
  911. if (b && b.nodeName.toLowerCase() === "a" && b.href) {
  912. c = b.href.match(f);
  913. if (c) {
  914. var e = o(b.href);
  915. e = e.replace(/^http[:]/, "https:"), e = e.replace(/^\/\//, "https://"), twttr.events.hub ? (d = new p(l.generateId(), b), l.add(d), n(e, b), twttr.events.trigger("click", {
  916. target: b,
  917. region: "intent",
  918. type: "click",
  919. data: {}
  920. })) : m(e), a.returnValue = !1, a.preventDefault && a.preventDefault()
  921. }
  922. }
  923. }
  924. var f = /twitter\.com(\:\d{2,4})?\/intent\/(\w+)/,
  925. g = "scrollbars=yes,resizable=yes,toolbar=no,location=yes",
  926. h = 550,
  927. i = 520,
  928. j = screen.height,
  929. k = screen.width,
  930. l, p = function(a, b) {
  931. this.id = a, this.element = this.originElement = b
  932. },
  933. r = function(a) {
  934. this.originElement = [], this.element = a
  935. };
  936. r.prototype = new c.Base, b.aug(r.prototype, {
  937. render: function(a) {
  938. l = this, window.__twitterIntentHandler || (document.addEventListener ? document.addEventListener("click", q, !1) : document.attachEvent && document.attachEvent("onclick", q), window.__twitterIntentHandler = !0)
  939. }
  940. }), a({
  941. Listener: r
  942. })
  943. })
  944. });
  945. provide("lib/twt", function(a) {
  946. a(function(a, b) {
  947. var c = a != "en" ? a + "." : "";
  948. using("$vendor/twt/dist/twt." + c + "min.js", function() {
  949. twt.settings.lang = a, b(twt)
  950. })
  951. })
  952. });
  953. provide("util/decider", function(a) {
  954. function c(a) {
  955. var c = b[a] || !1;
  956. if (!c) return !1;
  957. if (c === !0 || c === 100) return !0;
  958. var d = Math.random() * 100,
  959. e = c >= d;
  960. return b[a] = e, e
  961. }
  962. var b = {
  963. force_new_cookie: 100,
  964. decider_fixture: 12.34
  965. };
  966. a({
  967. isAvailable: c
  968. })
  969. });
  970. provide("util/params", function(a) {
  971. using("util/querystring", function(b) {
  972. var c = function(a) {
  973. var c = a.search.substr(1);
  974. return b.decode(c)
  975. },
  976. d = function(a) {
  977. var c = a.href,
  978. d = c.indexOf("#"),
  979. e = d < 0 ? "" : c.substring(d + 1);
  980. return b.decode(e)
  981. },
  982. e = function(a) {
  983. var b = {},
  984. e = c(a),
  985. f = d(a);
  986. for (var g in e) e.hasOwnProperty(g) && (b[g] = e[g]);
  987. for (var g in f) f.hasOwnProperty(g) && (b[g] = f[g]);
  988. return b
  989. };
  990. a({
  991. combined: e,
  992. fromQuery: c,
  993. fromFragment: d
  994. })
  995. })
  996. });
  997. provide("tfw/widget/env", function(a) {
  998. using("util/params", function(b) {
  999. function d() {
  1000. var a = 36e5,
  1001. d = b.combined(document.location)._;
  1002. return c !== undefined ? c : (c = !1, d && /^\d+$/.test(d) && (c = +(new Date) - parseInt(d) < a), c)
  1003. }
  1004. var c;
  1005. a({
  1006. isDynamicWidget: d
  1007. })
  1008. })
  1009. });
  1010. provide("dom/cookie", function(a) {
  1011. using("util/util", function(b) {
  1012. a(function(a, c, d) {
  1013. var e = b.aug({}, d);
  1014. if (arguments.length > 1 && String(c) !== "[object Object]") {
  1015. if (c === null || c === undefined) e.expires = -1;
  1016. if (typeof e.expires == "number") {
  1017. var f = e.expires,
  1018. g = new Date((new Date).getTime() + f * 60 * 1e3);
  1019. e.expires = g
  1020. }
  1021. return c = String(c), document.cookie = [encodeURIComponent(a), "=", e.raw ? c : encodeURIComponent(c), e.expires ? "; expires=" + e.expires.toUTCString() : "", e.path ? "; path=" + e.path : "", e.domain ? "; domain=" + e.domain : "", e.secure ? "; secure" : ""].join("")
  1022. }
  1023. e = c || {};
  1024. var h, i = e.raw ?
  1025. function(a) {
  1026. return a
  1027. } : decodeURIComponent;
  1028. return (h = (new RegExp("(?:^|; )" + encodeURIComponent(a) + "=([^;]*)")).exec(document.cookie)) ? i(h[1]) : null
  1029. })
  1030. })
  1031. });
  1032. provide("util/donottrack", function(a) {
  1033. using("dom/cookie", function(b) {
  1034. a(function() {
  1035. return b("dnt") ? !0 : document.navigator ? document.navigator["doNotTrack"] == 1 : navigator ? navigator["doNotTrack"] == 1 || navigator["msDoNotTrack"] == 1 : !1
  1036. })
  1037. })
  1038. });
  1039. provide("tfw/widget/guest_cookie", function(a) {
  1040. using("dom/cookie", "util/donottrack", "util/decider", function(b, c, d) {
  1041. function f() {
  1042. var a = b(e) || !1;
  1043. if (!a) return;
  1044. a.match(/^v3\:/) || g()
  1045. }
  1046. function g() {
  1047. b(e) && b(e, null, {
  1048. domain: ".twitter.com",
  1049. path: "/"
  1050. })
  1051. }
  1052. function h() {
  1053. c() && g()
  1054. }
  1055. var e = "pid";
  1056. a({
  1057. set: h,
  1058. destroy: g,
  1059. forceNewCookie: f,
  1060. guest_id_cookie: e
  1061. })
  1062. })
  1063. });
  1064. provide("tfw/widget/tracking", function(a) {
  1065. using("dom/cookie", "util/donottrack", "tfw/widget/guest_cookie", "tfw/widget/env", "util/decider", function(b, c, d, e, f) {
  1066. function i(a, b, c) {
  1067. var d = g + b;
  1068. if (!a) return;
  1069. return a[d] = c, a
  1070. }
  1071. function j(a, f, g, j, k) {
  1072. j || (j = !1), k || (k = !1), f || (f = {}), g = g || "tweetbutton";
  1073. var l = h[g] || h.tweetbutton,
  1074. m = a.ownerDocument.createElement("img"),
  1075. n = [];
  1076. j || (i(f, "referrer", document.referrer.toString()), i(f, "widget", +e.isDynamicWidget()), !k && !c() ? (i(f, "li", + !! b("twid")), i(f, d.guest_id_cookie, b(d.guest_id_cookie) || "")) : i(f, "dnt", "1"));
  1077. for (var o in f) if (f.hasOwnProperty(o)) {
  1078. var p = encodeURIComponent(o),
  1079. q = encodeURIComponent(f[o]);
  1080. q = q.replace(/'/g, "%27"), n.push(p + "=" + q)
  1081. }
  1082. m.src = l + "?" + n.join("&"), m.alt = "", m.style.position = "absolute", m.style.height = "1px", m.style.width = "1px", m.style.top = "-9999px", m.style.left = "-9999px", a.appendChild(m);
  1083. if (g == "tweetembed") {
  1084. var r = {
  1085. twttr_referrer: "referrer",
  1086. twttr_variant: "version",
  1087. lang: "language",
  1088. screen_name: "screen_name"
  1089. },
  1090. s = {
  1091. _category_: "tfw_widgets",
  1092. event_name: g + ":impression"
  1093. };
  1094. for (var o in f) {
  1095. var t = r[o];
  1096. t && (s[t] = f[o])
  1097. }!k && !c() && (f.twttr_li && (s.logged_in = f["twttr_li"] == "1"), s.pid = b(d.guest_id_cookie) || ""), f.status_id && (s.tweet_ids = [f.status_id]), f.twttr_widget && (s.widget = f["twttr_widget"] == "1");
  1098. var m = a.ownerDocument.createElement("img"),
  1099. u = "//r.twimg.com/jot?l=" + encodeURIComponent(JSON.stringify(s)).replace(/'/g, "%27");
  1100. if (k || c()) u += "&dnt=1";
  1101. m.src = u, m.alt = "", m.style.position = "absolute", m.style.height = "1px", m.style.width = "1px", m.style.top = "-9999px", m.style.left = "-9999px", a.appendChild(m)
  1102. }
  1103. }
  1104. var g = "twttr_",
  1105. h = {
  1106. tweetbutton: "//p.twitter.com/t.gif",
  1107. followbutton: "//p.twitter.com/f.gif",
  1108. tweetembed: "//p.twitter.com/e.gif"
  1109. };
  1110. f.isAvailable("force_new_cookie") && d.forceNewCookie(), a({
  1111. addPixel: j,
  1112. addVar: i
  1113. })
  1114. })
  1115. });
  1116. provide("util/tweetparser", function(a) {
  1117. using("util/util", function(b) {
  1118. function g(a, c) {
  1119. var d = document.getElementsByTagName(a),
  1120. e = b.filter(d, function(a) {
  1121. return b.containsElement(c, a)
  1122. });
  1123. return e || []
  1124. }
  1125. function h(a) {
  1126. return a && c.test(a) && RegExp.$1
  1127. }
  1128. function i(a) {
  1129. if (!a || !a.nodeName || !/blockquote/i.test(a.nodeName)) return;
  1130. var b = {},
  1131. c = g("p", a).shift(),
  1132. d = g("a", a).pop();
  1133. return c && (b.text = c.textContent || c.innerText || "", b.rendered_text = c.innerHTML || ""), d && (d.getAttribute("data-datetime") ? b.created_at = d.getAttribute("data-datetime") : b.time = d.textContent || d.innerText), b.user = j(a), b.id = b.id_str = h(d.href), b.id_str && b.text && b.user && b
  1134. }
  1135. function j(a) {
  1136. var b = {},
  1137. c = 0,
  1138. d = a.childNodes.length,
  1139. h, i;
  1140. for (; c < d; c++) {
  1141. h = a.childNodes[c];
  1142. if (h.nodeType === 3 && e.test(h.nodeValue) || h.nodeType === 1 && /^[p]$/i.test(h.nodeName) && e.test(h.innerText)) {
  1143. b.name = RegExp.$1.split(" ").slice(1).join(" "), b.screen_name = RegExp.$2;
  1144. break
  1145. }
  1146. }
  1147. if (b.screen_name) return b;
  1148. i = g("a", a).pop();
  1149. if (f.test(i.href)) return b.name = "", b.screen_name = RegExp.$2, b
  1150. }
  1151. var c = /\/(\d+)\/?$/,
  1152. d = /^https?:\/\/(?:www\.)?twitter\.com\/(?:#!\/)?[\w_]+\/status(?:es)?\/(\d+)\/?/,
  1153. e = /^\s*(.+)\s+\(@([\w_]{1,20})\)\s*$/,
  1154. f = /^https?:\/\/(?:www\.)?twitter\.com\/(#!\/)?([\w_]{1,20})/;
  1155. a({
  1156. parseTweet: i,
  1157. parseId: h,
  1158. parseAuthor: j
  1159. })
  1160. })
  1161. });
  1162. provide("i18n/i18n", function(a) {
  1163. function b() {
  1164. twttr.i18n_missing_interval || (twttr.i18n_missing_interval = window.setInterval(function() {
  1165. twttr.i18n_missing && twttr.i18n_missing.length > 0 && ($.ajax({
  1166. type: "POST",
  1167. data: $.param({
  1168. authenticity_token: twttr.form_authenticity_token,
  1169. location: window.location.href,
  1170. "strings[]": twttr.i18n_missing
  1171. }),
  1172. url: "/translate/untranslated_javascript"
  1173. }), twttr.i18n_missing = new Array)
  1174. }, 1e4))
  1175. }
  1176. function c(a) {
  1177. twttr.i18n_missing || (twttr.i18n_missing = new Array), twttr.i18n_missing_reported || (twttr.i18n_missing_reported = {}), twttr.i18n_missing_reported[a] || (twttr.i18n_missing.push(encodeURIComponent(a)), twttr.i18n_missing_reported[a] = !0)
  1178. }
  1179. function d(a, b) {
  1180. if (b) for (var c in b) a = a.replace(new RegExp("\\%\\{" + c + "\\}", "gi"), b[c]);
  1181. return a
  1182. }
  1183. window.setupTranslationCallback = b, a({
  1184. _: function(a, b) {
  1185. if (twttr.i18n) {
  1186. var e = twttr.i18n[a];
  1187. e ? a = e : c(a)
  1188. }
  1189. return d(a, b)
  1190. },
  1191. setupTranslationCallback: b
  1192. })
  1193. });
  1194. provide("tfw/data", function(a) {
  1195. using("util/querystring", function(b) {
  1196. window.twttr = window.twttr || {}, window.twttr.tfw = window.twttr.tfw || {}, window.twttr.tfw.callbacks = window.twttr.tfw.callbacks || {};
  1197. var c = "twttr.tfw.callbacks",
  1198. d = twttr.tfw.callbacks,
  1199. e = "cb",
  1200. f = 0,
  1201. g = !1,
  1202. h = function(a, b) {
  1203. return a == {}.toString.call(b).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
  1204. },
  1205. i = function(a) {
  1206. return function(b) {
  1207. b.error ? a.error && a.error(b) : a.success && a.success(b), a.complete && a.complete(b), j(a)
  1208. }
  1209. },
  1210. j = function(a) {
  1211. var b = a.script;
  1212. b && (b.onload = b.onreadystatechange = null, b.parentNode && b.parentNode.removeChild(b), a.script = undefined, b = undefined), a.callbackName && twttr.tfw.callbacks[a.callbackName] && delete twttr.tfw.callbacks[a.callbackName]
  1213. },
  1214. k = function(a) {
  1215. var b = {};
  1216. return a.success && h("function", a.success) && (b.success = a.success), a.error && h("function", a.error) && (b.error = a.error), a.complete && h("function", a.complete) && (b.complete = a.complete), b
  1217. },
  1218. l = function(a, h) {
  1219. g && (a = a.replace(/^\/\//, "https://"));
  1220. var j = e + f,
  1221. k = c + "." + j;
  1222. d[j] = i(h);
  1223. var l = document.createElement("script"),
  1224. m = {
  1225. callback: k,
  1226. suppress_response_codes: !0
  1227. };
  1228. l.src = b.url(a, m), l.async = "async";
  1229. var n = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
  1230. n.appendChild(l), h.script = l, h.callbackName = j, f++
  1231. },
  1232. m = function(a, b, c) {
  1233. var d = a.length,
  1234. e = [],
  1235. f = {},
  1236. g = 0;
  1237. return function(e) {
  1238. var h;
  1239. h = c(e), f[h] = e;
  1240. if (++g === d) {
  1241. var i = [],
  1242. j = [],
  1243. k = [];
  1244. for (var l = 0; l < d; l++) {
  1245. var e = f[a[l]];
  1246. i.push(e), e.error ? k.push(e) : j.push(e)
  1247. }
  1248. b.error && k.length > 0 && b.error(k), b.success && j.length > 0 && b.success(j), b.complete && b.complete(i)
  1249. }
  1250. }
  1251. },
  1252. n = {};
  1253. n.config = function(a) {
  1254. if (a.forceSSL === !0 || a.forceSSL === !1) g = a.forceSSL
  1255. }, n.user = function() {
  1256. var a = "//api.twitter.com/1/users/lookup.json",
  1257. c = "//cdn.api.twitter.com/1/users/show.json";
  1258. return function() {
  1259. var d, e = {};
  1260. arguments.length === 1 ? (d = arguments[0].screenName, e = k(arguments[0])) : (d = arguments[0], e.success = arguments[1]);
  1261. var f = h("array", d) ? a : c;
  1262. d = h("array", d) ? d.join(",") : d;
  1263. var g = {
  1264. screen_name: d
  1265. },
  1266. i = b.url(f, g);
  1267. l(i, e)
  1268. }
  1269. }(), n.status = function() {
  1270. var a = "//cdn.api.twitter.com/1/statuses/show.json";
  1271. return function() {
  1272. var c, d = {};
  1273. arguments.length === 1 ? (c = arguments[0].id, d = k(arguments[0])) : (c = arguments[0], d.success = arguments[1]);
  1274. if (!h("array", c)) {
  1275. var e = {
  1276. id: c,
  1277. include_entities: !0
  1278. },
  1279. f = b.url(a, e);
  1280. l(f, d)
  1281. } else {
  1282. var g = m(c, d, function(a) {
  1283. var b;
  1284. return a.error ? b = a.request.split("id=")[1].split("&")[0] : b = a.id_str, b
  1285. });
  1286. for (var i = 0; i < c.length; i++) {
  1287. var e = {
  1288. id: c[i],
  1289. include_entities: !0
  1290. },
  1291. f = b.url(a, e);
  1292. l(f, {
  1293. success: g,
  1294. error: g
  1295. })
  1296. }
  1297. }
  1298. }
  1299. }(), n.tweet = n.status, n.count = function() {
  1300. var a = "//cdn.api.twitter.com/1/urls/count.json";
  1301. return function() {
  1302. var c = "",
  1303. d = {};
  1304. arguments.length === 1 ? (c = arguments[0].url, d = k(arguments[0])) : arguments.length === 2 && (c = arguments[0], d.success = arguments[1]);
  1305. var e = {
  1306. url: c
  1307. },
  1308. f = b.url(a, e);
  1309. l(f, d)
  1310. }
  1311. }(), n.friendshipExists = function() {
  1312. var a = "//cdn.api.twitter.com/1/friendships/exists.json";
  1313. return function(c) {
  1314. var d = arguments[0],
  1315. e = k(arguments[0]),
  1316. f = {
  1317. screen_name_a: c.screenNameA,
  1318. screen_name_b: c.screenNameB
  1319. },
  1320. g = b.url(a, f);
  1321. l(g, e)
  1322. }
  1323. }(), a(n)
  1324. })
  1325. });
  1326. provide("util/insert", function(a) {
  1327. a(function(a, b) {
  1328. if (b) {
  1329. if (!b.parentNode) return b;
  1330. b.parentNode.replaceChild(a, b), delete b
  1331. } else document.body.insertBefore(a, document.body.firstChild);
  1332. return a
  1333. })
  1334. });
  1335. provide("dom/textsize", function(a) {
  1336. function c(a, b, c) {
  1337. return a + b + c
  1338. }
  1339. var b = {};
  1340. a(function(a, d, e) {
  1341. var f = document.createElement("span"),
  1342. g = {},
  1343. h;
  1344. return e = e || "", d = d || "", h = c(a, d, e), b[h] ? b[h] : (f.className = d + " twitter-measurement", f.setAttribute("style", e), f.innerHTML = a, document.body.appendChild(f), g.width = f.clientWidth || f.offsetWidth, g.height = f.clientHeight || f.offsetHeight, document.body.removeChild(f), delete f, b[h] = g)
  1345. })
  1346. });
  1347. provide("tfw/widget/tweet", function(a) {
  1348. using("util/util", "tfw/widget/base", "util/querystring", "util/uri", "dom/textsize", function(b, c, d, e, f) {
  1349. var g = document.title,
  1350. h = encodeURI(location.href),
  1351. i = ["vertical", "horizontal", "none"],
  1352. j = function(a) {
  1353. this.originElement = a, this.id = this.generateId();
  1354. var c = this.params(),
  1355. d = c.count || this.dataAttr("count"),
  1356. f = c.size || this.dataAttr("size"),
  1357. j = e.getScreenNameFromPage();
  1358. this.setLanguage(), ~a.className.indexOf("twitter-hashtag-button") ? this.type = "hashtag" : ~a.className.indexOf("twitter-mention-button") && (this.type = "mention"), this.text = c.text || this.dataAttr("text"), this.align = c.align || this.dataAttr("align") || "", this.via = c.via || this.dataAttr("via"), this.related = c.related || this.dataAttr("related"), this.counturl = c.counturl || this.dataAttr("counturl"), this.searchlink = c.searchlink || this.dataAttr("searchlink"), this.placeid = c.placeid || this.dataAttr("placeid"), this.hashtags = c.hashtags || this.dataAttr("hashtags"), this.screen_name = c.screen_name || this.dataAttr("button-screen-name"), this.button_hashtag = c.button_hashtag || this.dataAttr("button-hashtag"), this.url = c.url || this.dataAttr("url"), this.size = f == "large" ? "l" : "m", this.dnt = c.dnt || this.dataAttr("dnt") || "", this.type ? (this.count = "none", j && (this.related = this.related ? j + "," + this.related : j)) : (this.text = this.text || g, this.url = this.url || e.getCanonicalURL() || h, this.count = ~b.indexOf(i, d) ? d : "horizontal", this.count = this.count == "vertical" && this.size == "l" ? "none" : this.count, this.via = this.via || j)
  1359. };
  1360. j.prototype = new c.Base, b.aug(j.prototype, {
  1361. parameters: function() {
  1362. var a = {
  1363. text: this.text,
  1364. url: this.url,
  1365. via: this.via,
  1366. related: this.related,
  1367. count: this.count,
  1368. lang: this.lang,
  1369. counturl: this.counturl,
  1370. searchlink: this.searchlink,
  1371. placeid: this.placeid,
  1372. original_referer: location.href,
  1373. id: this.id,
  1374. size: this.size,
  1375. type: this.type,
  1376. screen_name: this.screen_name,
  1377. button_hashtag: this.button_hashtag,
  1378. hashtags: this.hashtags,
  1379. align: this.align,
  1380. dnt: this.dnt,
  1381. _: +(new Date)
  1382. };
  1383. return b.compact(a), d.encode(a)
  1384. },
  1385. height: function() {
  1386. return this.count == "vertical" ? 62 : this.size == "m" ? 20 : 28
  1387. },
  1388. width: function() {
  1389. var a = {
  1390. ver: 8,
  1391. cnt: 14,
  1392. btn: 24,
  1393. xlcnt: 18,
  1394. xlbtn: 38
  1395. },
  1396. c = this.count == "vertical",
  1397. d = this.type == "hashtag" ? "Tweet %{hashtag}" : this.type == "mention" ? "Tweet to %{name}" : "Tweet",
  1398. e = this._(d, {
  1399. name: "@" + this.screen_name,
  1400. hashtag: "#" + this.button_hashtag
  1401. }),
  1402. g = this._("K"),
  1403. h = this._("100K+"),
  1404. i = (c ? "8888" : "88888") + g,
  1405. j = 0,
  1406. k = 0,
  1407. l = 0,
  1408. m = 0,
  1409. n = this.styles.base,
  1410. o = n;
  1411. return ~b.indexOf(["ja", "ko"], this.lang) ? i += this._("10k unit") : i = i.length > h.length ? i : h, c ? (o = n + this.styles.vbubble, m = a.ver, l = a.btn) : this.size == "l" ? (n = o = n + this.styles.large, l = a.xlbtn, m = a.xlcnt) : (l = a.btn, m = a.cnt), this.count != "none" && (k = f(i, "", o).width + m), j = f(e, "", n + this.styles.button).width + l, c ? j > k ? j : k : this.calculatedWidth = j + k
  1412. },
  1413. render: function(a) {
  1414. var b = a.assetUrl() + "/widgets/tweet_button.1334389481.html#" + this.parameters();
  1415. this.count && (this.originElement.className += " twitter-count-" + this.count), this.element = this.create(b, this.originElement.className, this.dimensions(), {
  1416. title: this._("Twitter Tweet Button")
  1417. })
  1418. }
  1419. }), a({
  1420. Embeddable: j
  1421. })
  1422. })
  1423. });
  1424. provide("tfw/widget/tweetembed", function(a) {
  1425. using("util/util", "tfw/widget/base", "tfw/widget/tweet", "util/uri", "util/insert", "tfw/data", "i18n/i18n", "util/params", "util/tweetparser", "tfw/widget/tracking", function(b, c, d, e, f, g, h, i, j, k) {
  1426. function r(a) {
  1427. var b = document.createElement("link");
  1428. b.rel = "stylesheet", b.type = "text/css", b.href = twttr.widgets.config.assetUrl() + "/" + a, document.getElementsByTagName("head")[0].appendChild(b)
  1429. }
  1430. function s() {
  1431. if (n) return;
  1432. r("embed/embed.css"), n = !0
  1433. }
  1434. function t(a, b) {
  1435. var c = {};
  1436. c.status_id = a.id_str, c.context = p, k.addVar(c, "variant", l), k.addVar(c, "referrer", document.location.href), k.addPixel(document.body, c, "tweetembed", !0), b && a._wjs_reply && (c.status_id = a._wjs_reply.id_str, c.context = q, k.addPixel(document.body, c, "tweetembed", !0))
  1437. }
  1438. var l = "1.0",
  1439. m = i.fromQuery(document.location),
  1440. n, o = /^([0-9]+)( ?px)?$/,
  1441. p = "subject",
  1442. q = "thread",
  1443. u = function(a) {
  1444. var c, d, e = a.getAttribute("width") || "";
  1445. this.originElement = a, this.id = this.generateId(), c = this.params(), this.setLanguage(), this.related = c.related || a.getAttribute("data-related"), this.partner = c.partner || a.getAttribute("data-partner"), this.classNames = b.filter(a.className.split(" "), function(a) {
  1446. return a != "twitter-tweet"
  1447. }), this.classNames.push(["twitter-tweet-rendered"]), this.styleAttr = [], this.styleAttr.push(a.getAttribute("style") || ""), o.test(e) ? this.explicitWidth = RegExp.$1 : a.className.match(/(?:\b|^)tw-align-[lr]/i) && (this.explicitWidth = "350"), this.explicitWidth && this.styleAttr.push("width:" + this.explicitWidth + "px!important"), this.showThread = !~b.indexOf(this.classNames, "tw-hide-thread"), this.showMedia = !~b.indexOf(this.classNames, "tw-hide-media"), this.data = j.parseTweet(this.originElement), this.inReplyTo = a.getAttribute("data-in-reply-to") || ""
  1448. };
  1449. u.prototype = new c.Base, b.aug(u.prototype, {
  1450. create: function(a, b) {
  1451. var c = this,
  1452. d, e = !! a._wjs_stub_data;
  1453. return !e && t(a, c.showThread), using("lib/twt", function(g) {
  1454. g(c.lang, function(g) {
  1455. var h = document.createElement("div"),
  1456. i = g.autoFormat(c.explicitWidth || c.element),
  1457. j = g(a, {
  1458. format: i,
  1459. popupWebIntents: !1,
  1460. tweetElement: "blockquote",
  1461. showMedia: c.showMedia,
  1462. showErrors: !1,
  1463. showFollowButton: !e,
  1464. renderActions: !e,
  1465. product: "tweetembed",
  1466. partner: c.partner,
  1467. related: c.related
  1468. }),
  1469. k = '<div id="{{id}}" class="{{classNames}}" lang="{{lang}}" style="{{style}}">{{twt}}</div>',
  1470. l = {
  1471. id: c.id,
  1472. classNames: b || "",
  1473. style: c.styleAttr.join(";"),
  1474. lang: c.lang,
  1475. twt: c.data._wjs_reply ? j.inReplyTo(a._wjs_reply).html() : j.html()
  1476. };
  1477. h.innerHTML = c.ringo(k, l), d = f(h.firstChild, c.element)
  1478. })
  1479. }), d
  1480. },
  1481. render: function(a) {
  1482. var b = this,
  1483. c, d;
  1484. if (!b.data) return;
  1485. s(), using("lib/twt", function(a) {
  1486. a(b.lang, function() {
  1487. c = b.classNames.join(" "), b.data._wjs_stub_data = !0, b.element = b.originElement, b.element = b.create(b.data, c), d = [b.data.id_str], b.inReplyTo && b.showThread && d.push(b.inReplyTo), g.status({
  1488. id: d,
  1489. complete: function(a) {
  1490. var d = a[0],
  1491. e = a[1];
  1492. if (d.error) return;
  1493. b.data = d;
  1494. if (b.showThread && d.in_reply_to_status_id_str && (!e || d.in_reply_to_status_id_str != e.id_str)) {
  1495. g.status({
  1496. id: d.in_reply_to_status_id_str,
  1497. complete: function(a) {
  1498. a && !a.error && (b.data._wjs_reply = a), b.element = b.create(b.data, c)
  1499. }
  1500. });
  1501. return
  1502. }
  1503. d.in_reply_to_status_id_str && e && !e.error && (b.data._wjs_reply = e), b.element = b.create(b.data, c)
  1504. }
  1505. })
  1506. })
  1507. })
  1508. }
  1509. }), a({
  1510. Embeddable: u
  1511. })
  1512. })
  1513. });
  1514. provide("tfw/widget/follow", function(a) {
  1515. using("util/util", "tfw/widget/base", "util/querystring", "util/uri", "dom/textsize", function(b, c, d, e, f) {
  1516. var g = function(a) {
  1517. this.originElement = a;
  1518. var b = this.params(),
  1519. c = b.size || this.dataAttr("size"),
  1520. d = b.show_screen_name || this.dataAttr("show-screen-name"),
  1521. e = b.show_count || this.dataAttr("show-count");
  1522. this.id = this.generateId(), this.setLanguage(), this.showScreenName = d != "false", this.showCount = e != "false", this.explicitWidth = b.width || this.dataAttr("width") || "", this.screenName = this.screenNameFromHref(), this.preview = b.preview || this.dataAttr("preview") || "", this.align = b.align || this.dataAttr("align") || "", this.dnt = b.dnt || this.dataAttr("dnt") || "", this.size = c == "large" ? "l" : "m"
  1523. };
  1524. g.prototype = new c.Base, b.aug(g.prototype, {
  1525. parameters: function() {
  1526. var a = {
  1527. screen_name: this.screenName,
  1528. lang: this.lang,
  1529. show_count: this.showCount,
  1530. show_screen_name: this.showScreenName,
  1531. align: this.align,
  1532. id: this.id,
  1533. preview: this.preview,
  1534. size: this.size,
  1535. dnt: this.dnt,
  1536. _: +(new Date)
  1537. };
  1538. return b.compact(a), d.encode(a)
  1539. },
  1540. screenNameFromHref: function() {
  1541. var a = this.originElement.href;
  1542. return c.TWITTER_PROFILE_URL.test(a), RegExp.$1
  1543. },
  1544. render: function(a) {
  1545. if (!this.screenName) return;
  1546. var b = a.assetUrl() + "/widgets/follow_button.1334389481.html#" + this.parameters();
  1547. this.element = this.create(b, "twitter-follow-button", this.dimensions(), {
  1548. title: this._("Twitter Follow Button")
  1549. })
  1550. },
  1551. width: function() {
  1552. if (this.calculatedWidth) return this.calculatedWidth;
  1553. if (this.explicitWidth) return this.explicitWidth;
  1554. var a = {
  1555. cnt: 13,
  1556. btn: 24,
  1557. xlcnt: 22,
  1558. xlbtn: 38
  1559. },
  1560. c = this.showScreenName ? "Follow %{screen_name}" : "Follow",
  1561. d = this._(c, {
  1562. screen_name: "@" + this.screenName
  1563. }),
  1564. e = ~b.indexOf(["ja", "ko"], this.lang) ? this._("10k unit") : this._("M"),
  1565. g = this._("%{followers_count} followers", {
  1566. followers_count: "88888" + e
  1567. }),
  1568. h = 0,
  1569. i = 0,
  1570. j = this.styles.base;
  1571. return this.size == "l" ? (j += this.styles.large, buttonPadding = a.xlbtn, countPadding = a.xlcnt) : (buttonPadding = a.btn, countPadding = a.cnt), this.showCount && (i = f(g, "", j).width + countPadding), h = f(d, "", j + this.styles.button).width + buttonPadding, this.calculatedWidth = h + i
  1572. }
  1573. }), a({
  1574. Embeddable: g
  1575. })
  1576. })
  1577. });
  1578. !
  1579. function() {
  1580. function a(a) {
  1581. return (window.location.protocol.match(/s\:$/) || a) && !twttr.ignoreSSL ? "https" : "http"
  1582. }
  1583. window.twttr = window.twttr || {}, twttr.host = twttr.host || "platform.twitter.com";
  1584. if (twttr.widgets) return twttr.widgets.loaded && twttr.widgets.load(), !1;
  1585. if (twttr.init) return !1;
  1586. twttr.init = !0, !
  1587. function() {
  1588. twttr._e = twttr._e || [], twttr.ready = twttr.ready ||
  1589. function(a) {
  1590. twttr.widgets && twttr.widgets.loaded ? a(twttr) : twttr._e.push(a)
  1591. }
  1592. }(), using.path.length || (using.path = "//" + twttr.host + "/js"), twttr.ignoreSSL = twttr.ignoreSSL || !1;
  1593. var b = [];
  1594. twttr.events = {
  1595. bind: function(a, c) {
  1596. return b.push([a, c])
  1597. }
  1598. }, using("util/domready", function(c) {
  1599. c(function() {
  1600. using("util/util", "tfw/widget/follow", "tfw/widget/tweet", "tfw/widget/tweetembed", "tfw/widget/intent", "util/events", "tfw/widget/base", function(c, d, e, f, g, h, i) {
  1601. function l() {
  1602. using("tfw/widget/hubclient", function(a) {
  1603. twttr.events.hub = a.init(j), a.init(j, !0)
  1604. })
  1605. }
  1606. var j = {
  1607. widgets: {
  1608. "a.twitter-share-button": e.Embeddable,
  1609. "a.twitter-mention-button": e.Embeddable,
  1610. "a.twitter-hashtag-button": e.Embeddable,
  1611. "a.twitter-follow-button": d.Embeddable,
  1612. "blockquote.twitter-tweet": f.Embeddable,
  1613. body: g.Listener
  1614. }
  1615. },
  1616. k = twttr.events && twttr.events.hub ? twttr.events : {};
  1617. twttr.events = c.aug(k, h.Emitter), j.assetUrl = function(b) {
  1618. var c = twttr.host;
  1619. return a(b) === "https" && twttr.secureHost && (c = twttr.secureHost), a(b) + "://" + c
  1620. }, twttr.events.oldbind = twttr.events.bind, twttr.events.bind = function(a, b) {
  1621. l(), this.bind = this.oldbind, this.bind(a, b)
  1622. };
  1623. for (var m = 0, n; n = b[m]; m++) twttr.events.bind(n[0], n[1]);
  1624. for (m = 0; n = twttr._e[m]; m++) n(twttr);
  1625. twttr.ready = function(a) {
  1626. a(twttr)
  1627. }, twttr.widgets = {
  1628. load: function() {
  1629. i.init(j), i.embed(), twttr.widgets.loaded = !0
  1630. },
  1631. config: j
  1632. }, twttr.widgets.load()
  1633. })
  1634. })
  1635. })
  1636. }()
  1637. });