Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 352.54 KB | None | 0 0
  1. "use strict";
  2. angular.module("payment.popup", ["config", "google.analytics", "notifier", "popup", "purse.service", "system.data"]).factory("paymentPopup", ["$q", "$translate", "$window", "CONFIG", "SystemData", "googleAnalytics", "notifier", "popup", "purse", function(e, t, o, r, a, n, i, s, l) {
  3. function c(e) {
  4. return "/proceed/" + [e.requestPath, e.purchaseParams.countryId, e.purchaseParams.pricePointId, e.purchaseParams.paymentMethodId].join("/")
  5. }
  6. function u(e) {
  7. var t = a.getShopCountry();
  8. t !== e && n.trackEvent("Payment", "Country changed", "Used: " + e + ", Default: " + t)
  9. }
  10. var d = {};
  11. return d.getItemName = function(o) {
  12. var r = ["CREDITS_AMOUNT"];
  13. return o.creditAmount ? (o.doubleCredits && r.push("DOUBLE_CREDITS_PREFIX"),
  14. t(r, {
  15. value: o.creditAmount
  16. }).then(function(e) {
  17. return _([e.DOUBLE_CREDITS_PREFIX, e.CREDITS_AMOUNT]).compact().join(" ")
  18. })) : e.when(o.name)
  19. }
  20. ,
  21. d.sendShopTrackingEvents = function(e, t, r) {
  22. var a = "Item: " + t + ", Method: " + r;
  23. switch (e) {
  24. case "SUCCESS":
  25. n.trackEvent("Payment", "Succeeded", a),
  26. o.piwikTrack && (o._spef.push(["trackGoal", 2, a]),
  27. o.piwikTrack());
  28. break;
  29. case "PENDING":
  30. n.trackEvent("Payment", "Pending", a);
  31. break;
  32. case "ERROR":
  33. n.trackEvent("Payment", "Failed", a);
  34. break;
  35. default:
  36. n.trackEvent("Payment", "Aborted", a)
  37. }
  38. }
  39. ,
  40. d.open = function(e, t) {
  41. function a(o) {
  42. o.originalEvent.data && o.originalEvent.data.status && (p = o.originalEvent.data.status,
  43. "SUCCESS" !== p && "PENDING" !== p || (l.update(),
  44. u(t.countryCode),
  45. d.getItemName(t).then(function(e) {
  46. var r = o.originalEvent.data.txId
  47. , a = o.originalEvent.data.currency
  48. , i = o.originalEvent.data.priceInCents
  49. , s = _(t.categories).sort().join(", ")
  50. , l = Number(i / 100).toFixed(2);
  51. n.trackTransaction(r, e, t.id, s, l, a)
  52. })),
  53. d.sendShopTrackingEvents(p, t.id, e.id))
  54. }
  55. function m() {
  56. "SUCCESS" === p && d.getItemName(t).then(function(e) {
  57. i.success("SHOP_PAYMENT_SUCCESS", {
  58. name: e
  59. })
  60. })
  61. }
  62. var p, h = c(e);
  63. return angular.element(o).on("message", a),
  64. s.open(r.shopUrl + h).then(function() {
  65. m(),
  66. angular.element(o).off("message", a)
  67. })
  68. }
  69. ,
  70. d
  71. }
  72. ]),
  73. angular.module("subscription.unsubscribe", ["locale", "notifier", "subscriptions.service", "templates"]).constant("SUBSCRIPTION_EVENTS", {
  74. cancel: "subscription-cancel"
  75. }).component("habboSubscriptionUnsubscribe", {
  76. bindings: {
  77. item: "<"
  78. },
  79. controller: ["$scope", "$translate", "$window", "SUBSCRIPTION_EVENTS", "Subscriptions", "notifier", function(e, t, o, r, a, n) {
  80. function i() {
  81. var t = {
  82. countryCode: s.item.countryCode,
  83. subscriptionType: s.item.subscriptionType
  84. };
  85. return a.cancel(t).$promise.then(function() {
  86. e.$emit(r.cancel)
  87. })["catch"](function() {
  88. n.error("ERROR_SERVER"),
  89. s.unsubscribeInProgress = !1
  90. })
  91. }
  92. var s = this;
  93. s.unsubscribeInProgress = !1,
  94. s.unsubscribe = function() {
  95. s.unsubscribeInProgress = !0,
  96. t("CONFIRMATION_TITLE").then(function(e) {
  97. o.confirm(e) ? i() : s.unsubscribeInProgress = !1
  98. })
  99. }
  100. }
  101. ],
  102. controllerAs: "SubscriptionUnsubscribeController",
  103. templateUrl: "shop/subscriptions/subscription/subscription-unsubscribe/subscription-unsubscribe.html"
  104. }),
  105. angular.module("subscription.page", []).constant("PAGE_BY_TYPE", {
  106. 0: "store/subscribe/subscribe_supersaver",
  107. 1: "store/subscribe/subscribe_bc"
  108. }).directive("habboSubscriptionPage", ["PAGE_BY_TYPE", function(e) {
  109. return {
  110. restrict: "A",
  111. link: function(t, o, r) {
  112. t.$watch(r.habboSubscriptionPage, function(t) {
  113. r.$set("key", e[t.subscriptionType])
  114. })
  115. }
  116. }
  117. }
  118. ]),
  119. angular.module("sub.product.icons", ["locale", "templates"]).component("habboSubProductIcons", {
  120. bindings: {
  121. subProducts: "<"
  122. },
  123. controllerAs: "SubProductIconsController",
  124. templateUrl: "shop/payment-details/product-payment-details/sub-product-icons/sub-product-icons.html"
  125. }),
  126. angular.module("payment.premium.sms", ["config", "locale", "templates", "voucher.redeem"]).component("habboPremiumSms", {
  127. bindings: {
  128. method: "<"
  129. },
  130. controller: ["CONFIG", function(e) {
  131. var t = this
  132. , o = [e.localizationSite, t.method.localizationKey].join("_");
  133. t.methodSmallPrintKey = ["SHOP_PAYMENTMETHOD_SMALLPRINT", o].join("_").toUpperCase(),
  134. t.methodInstructionKey = ["SHOP_PAYMENTMETHOD_INSTRUCTION", o].join("_").toUpperCase()
  135. }
  136. ],
  137. controllerAs: "PremiumSmsController",
  138. templateUrl: "shop/payment-details/payment-steps/premium-sms/premium-sms.html",
  139. transclude: !0
  140. }),
  141. angular.module("payment.methods", ["locale", "payment.button", "security", "shop.filters", "templates"]).component("habboPaymentMethods", {
  142. require: {
  143. PaymentStepsController: "^habboPaymentSteps"
  144. },
  145. bindings: {
  146. item: "<",
  147. selectedCategory: "@"
  148. },
  149. controllerAs: "PaymentMethodsController",
  150. templateUrl: "shop/payment-details/payment-steps/payment-methods/payment-methods.html"
  151. }),
  152. angular.module("payment.disclaimer", ["ngSanitize", "config", "locale", "payment.button", "templates"]).component("habboPaymentDisclaimer", {
  153. bindings: {
  154. item: "<",
  155. method: "<"
  156. },
  157. controller: ["CONFIG", function(e) {
  158. var t = this
  159. , o = [e.localizationSite, t.method.localizationKey].join("_");
  160. t.methodSmallPrintKey = ["SHOP_PAYMENTMETHOD_SMALLPRINT", o].join("_").toUpperCase(),
  161. t.methodInstructionKey = ["SHOP_PAYMENTMETHOD_INSTRUCTION", o].join("_").toUpperCase()
  162. }
  163. ],
  164. controllerAs: "PaymentDisclaimerController",
  165. templateUrl: "shop/payment-details/payment-steps/payment-disclaimer/payment-disclaimer.html"
  166. }),
  167. angular.module("payment.button", ["events", "locale", "payment.popup", "security", "templates"]).component("habboPaymentButton", {
  168. bindings: {
  169. item: "<",
  170. method: "<"
  171. },
  172. controller: ["$scope", "EVENTS", "Session", "loginModal", "paymentPopup", function(e, t, o, r, a) {
  173. function n() {
  174. return _.includes(i, s.method.category)
  175. }
  176. var i = ["builders", "subscription"]
  177. , s = this;
  178. s.translationKey = n() ? "SHOP_SUBSCRIPTION_SUBSCRIBE_BUTTON" : "SHOP_PAYMENT_BUTTON",
  179. s.paymentInProgress = !1,
  180. o.hasSession() ? s.purchase = function() {
  181. s.paymentInProgress = !0,
  182. a.open(s.method, s.item).then(function() {
  183. e.$emit(t.shopPaymentClose)
  184. })["finally"](function() {
  185. s.paymentInProgress = !1
  186. })
  187. }
  188. : s.purchase = r.open
  189. }
  190. ],
  191. controllerAs: "PaymentButtonController",
  192. templateUrl: "shop/payment-details/payment-steps/payment-button/payment-button.html"
  193. }),
  194. angular.module("adyen.service", ["adyen-cse-js", "config"]).factory("adyen", ["$http", "CONFIG", "adyenCse", function(e, t, o) {
  195. return {
  196. encryptAndSend: function(r, a, n) {
  197. var i = {
  198. number: r.number,
  199. cvc: r.cvc,
  200. holderName: r.name,
  201. expiryMonth: r.expMonth.toString(),
  202. expiryYear: r.expYear.toString(),
  203. generationtime: a
  204. }
  205. , s = {
  206. countryId: n.purchaseParams.countryId,
  207. pricePointId: n.purchaseParams.pricePointId,
  208. paymentMethodId: n.id,
  209. creditCardNonce: o.encrypt(i)
  210. };
  211. return e.post(t.shopUrl + "/payment/adyen/", s)
  212. }
  213. }
  214. }
  215. ]),
  216. angular.module("adyen-cse-js", ["config"]).factory("adyenCse", ["$window", "CONFIG", function(e, t) {
  217. var o = t.adyenPublicKey
  218. , r = {}
  219. , a = e.adyen.encrypt.createEncryption(o, r);
  220. return a
  221. }
  222. ]),
  223. angular.module("payment.adyen", ["adyen.service", "config", "credit.card", "events", "locale", "notifier", "purse.service", "templates"]).component("habboAdyen", {
  224. bindings: {
  225. method: "<",
  226. item: "<"
  227. },
  228. controller: ["$window", "$http", "$scope", "$rootScope", "$translate", "CONFIG", "EVENTS", "adyen", "notifier", "paymentPopup", "purse", function(e, t, o, r, a, n, i, s, l, c, u) {
  229. var d = this;
  230. d.state = "AWAITING_INPUT",
  231. d.transactionId = "",
  232. d.close = function() {
  233. r.$broadcast(i.accordionClose),
  234. r.$broadcast(i.accordionUpdate)
  235. }
  236. ,
  237. d.showInputForm = function() {
  238. d.transactionId = "",
  239. d.state = "AWAITING_INPUT"
  240. }
  241. ,
  242. d.onSend = function(e) {
  243. var o = n.apiUrl + "/public/info/time";
  244. return t.get(o).then(function(t) {
  245. var o = new Date(t.data.time).toISOString();
  246. return s.encryptAndSend(e, o, d.method).then(function(e) {
  247. if (e.data.success === !0)
  248. u.update(),
  249. d.transactionId = e.data.transactionId,
  250. d.state = "SUCCESS",
  251. d.card = {},
  252. c.getItemName(d.item).then(function(e) {
  253. l.success("SHOP_PAYMENT_SUCCESS", {
  254. name: e
  255. })
  256. }),
  257. c.sendShopTrackingEvents("SUCCESS", d.item.id, d.method.id);
  258. else
  259. switch (d.state = "FAILURE",
  260. e.data.message) {
  261. case "LIMIT_EXCEEDED":
  262. d.errorType = "LIMIT_EXCEEDED";
  263. break;
  264. case "RISK_CHECK_FAILED":
  265. d.errorType = "RISK_CHECK_FAILED";
  266. break;
  267. case "CONNECTION_FAILED:422":
  268. d.errorType = "USER_DATA";
  269. break;
  270. default:
  271. Bugsnag.notify("Adyen integration returned unexpected result", {
  272. groupingHash: "Payments",
  273. response: e.data.message
  274. }, "info"),
  275. d.errorType = "HTTP_ERROR"
  276. }
  277. })["catch"](function(e) {
  278. d.state = "FAILURE",
  279. d.errorType = "HTTP_ERROR",
  280. d.errorMsg = e.data.errorDetail.content.instructions
  281. })
  282. })["catch"](function() {
  283. l.error("ERROR_SERVER")
  284. })
  285. }
  286. }
  287. ],
  288. controllerAs: "AdyenController",
  289. templateUrl: "shop/payment-details/payment-steps/adyen/adyen.html",
  290. transclude: !0
  291. }),
  292. angular.module("remote.data", []).directive("habboRemoteData", function() {
  293. function e(e) {
  294. return "remoteData" + t(e)
  295. }
  296. function t(e) {
  297. return e.charAt(0).toUpperCase() + e.slice(1)
  298. }
  299. function o(e) {
  300. return "$" !== e[0]
  301. }
  302. return {
  303. restrict: "A",
  304. require: ["^form", "ngModel"],
  305. link: function(t, r, a, n) {
  306. var i, s = n[0], l = n[1], c = t.$eval(a.habboRemoteData);
  307. t.$on("remote-data-invalid", function(t, o) {
  308. _(c).includes(o) && (i = e(o),
  309. l.$setValidity(i, !1))
  310. }),
  311. t.$watch(function() {
  312. return l.$viewValue
  313. }, function() {
  314. i && _(s).keys().filter(o).forEach(function(e) {
  315. s[e].$setValidity(i, !0)
  316. })
  317. })
  318. }
  319. }
  320. }),
  321. angular.module("password.pattern", []).directive("habboPasswordPattern", function() {
  322. return {
  323. require: "ngModel",
  324. restrict: "A",
  325. link: function(e, t, o, r) {
  326. function a() {
  327. var e = r.$viewValue;
  328. return !e || r.$pristine || i(e)
  329. }
  330. function n(e) {
  331. r.$setValidity("passwordPattern", e)
  332. }
  333. function i(e) {
  334. return /(?=.*[A-Za-z])(?=.*[0-9-=?!@:.])/.test(e)
  335. }
  336. e.$watch(a, n)
  337. }
  338. }
  339. }),
  340. angular.module("password.name", []).directive("habboPasswordName", function() {
  341. return {
  342. require: "ngModel",
  343. restrict: "A",
  344. link: function(e, t, o, r) {
  345. function a(e) {
  346. return n && (_(e).includes(n) || _(e).includes(i))
  347. }
  348. var n, i;
  349. o.$observe("habboPasswordName", function(e) {
  350. n = e,
  351. i = n.split("").reverse().join(""),
  352. r.$validate()
  353. }),
  354. r.$validators.passwordName = function(e, t) {
  355. return r.$isEmpty(e) || !a(t)
  356. }
  357. }
  358. }
  359. }),
  360. angular.module("password.email", []).directive("habboPasswordEmail", function() {
  361. return {
  362. require: "ngModel",
  363. restrict: "A",
  364. link: function(e, t, o, r) {
  365. function a(e) {
  366. return n && (_(e).includes(n) || _(e).includes(i))
  367. }
  368. var n, i;
  369. o.$observe("habboPasswordEmail", function(e) {
  370. n = e,
  371. i = n.split("").reverse().join(""),
  372. r.$validate()
  373. }),
  374. r.$validators.passwordEmail = function(e, t) {
  375. return r.$isEmpty(e) || !a(t)
  376. }
  377. }
  378. }
  379. }),
  380. angular.module("matches", []).directive("habboMatches", function() {
  381. return {
  382. require: ["^form", "ngModel"],
  383. restrict: "A",
  384. scope: {
  385. habboMatches: "@"
  386. },
  387. link: function(e, t, o, r) {
  388. function a() {
  389. var t = i[e.habboMatches]
  390. , o = s.$viewValue;
  391. return !o || s.$pristine || t.$invalid || t.$viewValue === o
  392. }
  393. function n(e) {
  394. s.$setValidity("matches", e)
  395. }
  396. var i = r[0]
  397. , s = r[1];
  398. e.$watch(a, n)
  399. }
  400. }
  401. }),
  402. angular.module("email", []).directive("habboEmail", function() {
  403. var e = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i;
  404. return {
  405. require: "ngModel",
  406. restrict: "A",
  407. link: function(t, o, r, a) {
  408. a && a.$validators.email && (a.$validators.email = function(t) {
  409. return a.$isEmpty(t) || e.test(t)
  410. }
  411. )
  412. }
  413. }
  414. }),
  415. angular.module("password.strength.service", []).factory("passwordStrength", function() {
  416. var e = "abcdefghijklmnopqrstuvwxyz"
  417. , t = "01234567890"
  418. , o = /\d/g
  419. , r = "\\!@#$%&/()=?¿"
  420. , a = /[$-\/:-?{-~!^_`\[\]]/g
  421. , n = /(?=([a-z]{2}))/g
  422. , i = /(?=([A-Z]{2}))/g
  423. , s = /(?=(\d{2}))/g
  424. , l = /^[0-9]*$/g
  425. , c = /^([a-z]|[A-Z])*$/g;
  426. return function(u) {
  427. var d, m, p, h, b = 0, f = {
  428. pos: {},
  429. neg: {}
  430. }, g = {
  431. pos: {},
  432. neg: {
  433. seqLetter: 0,
  434. seqNumber: 0,
  435. seqSymbol: 0
  436. }
  437. };
  438. if (u) {
  439. for (f.pos.lower = u.match(/[a-z]/g),
  440. f.pos.upper = u.match(/[A-Z]/g),
  441. f.pos.numbers = u.match(o),
  442. f.pos.symbols = u.match(a),
  443. f.pos.middleNumber = u.slice(1, -1).match(o),
  444. f.pos.middleSymbol = u.slice(1, -1).match(a),
  445. g.pos.lower = f.pos.lower ? f.pos.lower.length : 0,
  446. g.pos.upper = f.pos.upper ? f.pos.upper.length : 0,
  447. g.pos.numbers = f.pos.numbers ? f.pos.numbers.length : 0,
  448. g.pos.symbols = f.pos.symbols ? f.pos.symbols.length : 0,
  449. p = _.reduce(g.pos, function(e, t) {
  450. return e + Math.min(1, t)
  451. }, 0),
  452. g.pos.numChars = u.length,
  453. p += g.pos.numChars >= 8 ? 1 : 0,
  454. g.pos.requirements = p >= 3 ? p : 0,
  455. g.pos.middleNumber = f.pos.middleNumber ? f.pos.middleNumber.length : 0,
  456. g.pos.middleSymbol = f.pos.middleSymbol ? f.pos.middleSymbol.length : 0,
  457. f.neg.consecLower = u.match(n),
  458. f.neg.consecUpper = u.match(i),
  459. f.neg.consecNumbers = u.match(s),
  460. f.neg.onlyNumbers = u.match(l),
  461. f.neg.onlyLetters = u.match(c),
  462. g.neg.consecLower = f.neg.consecLower ? f.neg.consecLower.length : 0,
  463. g.neg.consecUpper = f.neg.consecUpper ? f.neg.consecUpper.length : 0,
  464. g.neg.consecNumbers = f.neg.consecNumbers ? f.neg.consecNumbers.length : 0,
  465. h = 0; h < e.length - 2; h++) {
  466. var v = u.toLowerCase();
  467. m = e.substring(h, parseInt(h + 3, 10)),
  468. d = m.split("").reverse().join(""),
  469. -1 === v.indexOf(m) && -1 === v.indexOf(d) || g.neg.seqLetter++
  470. }
  471. for (h = 0; h < t.length - 2; h++)
  472. m = t.substring(h, parseInt(h + 3, 10)),
  473. d = m.split("").reverse().join(""),
  474. -1 === u.indexOf(m) && -1 === u.toLowerCase().indexOf(d) || g.neg.seqNumber++;
  475. for (h = 0; h < r.length - 2; h++)
  476. m = r.substring(h, parseInt(h + 3, 10)),
  477. d = m.split("").reverse().join(""),
  478. -1 === u.indexOf(m) && -1 === u.toLowerCase().indexOf(d) || g.neg.seqSymbol++;
  479. return g.neg.repeated = _(u.toLowerCase().split("")).countBy(function(e) {
  480. return e
  481. }).reject(function(e) {
  482. return 1 === e
  483. }).reduce(function(e, t) {
  484. return e + t
  485. }, 0),
  486. b += 4 * g.pos.numChars,
  487. g.pos.upper && (b += 2 * (g.pos.numChars - g.pos.upper)),
  488. g.pos.lower && (b += 2 * (g.pos.numChars - g.pos.lower)),
  489. (g.pos.upper || g.pos.lower) && (b += 4 * g.pos.numbers),
  490. b += 6 * g.pos.symbols,
  491. b += 2 * (g.pos.middleSymbol + g.pos.middleNumber),
  492. b += 2 * g.pos.requirements,
  493. b -= 2 * g.neg.consecLower,
  494. b -= 2 * g.neg.consecUpper,
  495. b -= 2 * g.neg.consecNumbers,
  496. b -= 3 * g.neg.seqNumber,
  497. b -= 3 * g.neg.seqLetter,
  498. b -= 3 * g.neg.seqSymbol,
  499. f.neg.onlyNumbers && (b -= g.pos.numChars),
  500. f.neg.onlyLetters && (b -= g.pos.numChars),
  501. g.neg.repeated && (b -= g.neg.repeated / g.pos.numChars * 10),
  502. Math.max(0, Math.min(100, Math.round(b)))
  503. }
  504. }
  505. }),
  506. angular.module("password.strength.indicator", ["ngAnimate"]).directive("habboPasswordStrengthIndicator", ["$animate", function(e) {
  507. return {
  508. restrict: "A",
  509. link: function(t, o, r) {
  510. var a = "10%";
  511. t.$watch(r.habboPasswordStrengthIndicator, function(t) {
  512. var r = t + "%";
  513. e.animate(o, {
  514. width: a
  515. }, {
  516. width: r
  517. }),
  518. a = r
  519. })
  520. }
  521. }
  522. }
  523. ]),
  524. angular.module("password.strength.filters", []).filter("strengthRating", function() {
  525. return function(e) {
  526. switch (Math.round(e / 25)) {
  527. case 1:
  528. return "poor";
  529. case 2:
  530. return "fair";
  531. case 3:
  532. return "ok";
  533. case 4:
  534. return "good";
  535. default:
  536. return "fail"
  537. }
  538. }
  539. }).filter("ratingTranslation", function() {
  540. return function(e) {
  541. return "PASSWORD_STRENGTH_RATING_" + e.toUpperCase()
  542. }
  543. }),
  544. angular.module("password.strength", ["locale", "password.strength.filters", "password.strength.indicator", "password.strength.service", "templates"]).component("habboPasswordStrength", {
  545. require: {
  546. FormController: "^form"
  547. },
  548. bindings: {
  549. modelValue: "<",
  550. modelName: "@"
  551. },
  552. controller: ["$scope", "passwordStrength", function(e, t) {
  553. var o = this;
  554. e.$watch("PasswordStrengthController.modelValue", function(e) {
  555. o.FormController[o.modelName].$valid && (o.score = t(e))
  556. }),
  557. e.$watch("PasswordStrengthController.FormController." + o.modelName + ".$invalid", function(e) {
  558. e && (o.score = 10)
  559. })
  560. }
  561. ],
  562. controllerAs: "PasswordStrengthController",
  563. templateUrl: "common/form/password-new/password-strength/password-strength.html",
  564. transclude: !0
  565. }),
  566. angular.module("voucher.icon", ["templates"]).component("habboVoucherIcon", {
  567. bindings: {
  568. credits: "<?",
  569. product: "<?"
  570. },
  571. controllerAs: "VoucherIconController",
  572. templateUrl: "shop/voucher-redeem/voucher-icon/voucher-icon.html"
  573. }),
  574. angular.module("shop.transactions.history", ["locale", "templates"]).component("habboTransactionsHistory", {
  575. bindings: {
  576. transactions: "<",
  577. limitTo: "@"
  578. },
  579. controllerAs: "TransactionsHistoryController",
  580. templateUrl: "shop/transactions/transactions-history/transactions-history.html"
  581. }),
  582. angular.module("subscription.thumbnail", ["credit.icon", "locale", "templates"]).component("habboSubscriptionThumbnail", {
  583. bindings: {
  584. item: "<"
  585. },
  586. controllerAs: "SubscriptionThumbnailController",
  587. templateUrl: "shop/thumbnails/subscription-thumbnail/subscription-thumbnail.html"
  588. }),
  589. angular.module("product.thumbnail", ["product.icon", "templates"]).component("habboProductThumbnail", {
  590. bindings: {
  591. item: "<"
  592. },
  593. controllerAs: "ProductThumbnailController",
  594. templateUrl: "shop/thumbnails/product-thumbnail/product-thumbnail.html"
  595. }),
  596. angular.module("offer.thumbnail", ["locale", "product.icon", "templates"]).component("habboOfferThumbnail", {
  597. bindings: {
  598. item: "<"
  599. },
  600. controllerAs: "OfferThumbnailController",
  601. templateUrl: "shop/thumbnails/offer-thumbnail/offer-thumbnail.html"
  602. }),
  603. angular.module("credit.thumbnail", ["credit.icon", "credit.title", "templates"]).component("habboCreditThumbnail", {
  604. bindings: {
  605. item: "<"
  606. },
  607. controllerAs: "CreditThumbnailController",
  608. templateUrl: "shop/thumbnails/credit-thumbnail/credit-thumbnail.html"
  609. }),
  610. angular.module("subscription", ["locale", "subscription.page", "subscription.payment.details", "subscription.thumbnail", "subscription.unsubscribe", "templates"]).component("habboSubscription", {
  611. bindings: {
  612. item: "<"
  613. },
  614. controllerAs: "SubscriptionController",
  615. templateUrl: "shop/subscriptions/subscription/subscription.html"
  616. }),
  617. angular.module("shop.targeted.offer", ["accordion", "offer.payment.details", "offer.thumbnail", "templates"]).component("habboTargetedOffer", {
  618. bindings: {
  619. offer: "<"
  620. },
  621. controller: function() {
  622. var e = this;
  623. e.offerPaymentDetails = {
  624. imageUrl: e.offer.imageUrl,
  625. smallImageUrl: e.offer.smallImageUrl,
  626. name: e.offer.header,
  627. description: e.offer.description,
  628. price: e.offer.pricePoint.price,
  629. paymentMethods: e.offer.pricePoint.paymentMethods
  630. }
  631. },
  632. controllerAs: "TargetedOfferController",
  633. templateUrl: "shop/store/targeted-offer/targeted-offer.html"
  634. }),
  635. angular.module("products", ["accordion", "locale", "product.payment.details", "product.thumbnail", "templates"]).component("habboProducts", {
  636. bindings: {
  637. items: "<",
  638. selectedCategory: "@"
  639. },
  640. controllerAs: "ProductsController",
  641. templateUrl: "shop/store/inventory/products.html"
  642. }),
  643. angular.module("shop.inventory", ["credits", "products", "shop.filters", "templates"]).component("habboInventory", {
  644. bindings: {
  645. inventory: "<",
  646. selectedCategory: "@"
  647. },
  648. controller: ["creditFilter", "paymentFilter", "productFilter", function(e, t, o) {
  649. var r = this
  650. , a = t(r.inventory.pricePoints, r.selectedCategory);
  651. r.creditItems = e(a),
  652. r.productItems = o(a),
  653. r.isDoubleCreditsActive = r.inventory.doubleCredits
  654. }
  655. ],
  656. controllerAs: "InventoryController",
  657. templateUrl: "shop/store/inventory/inventory.html"
  658. }),
  659. angular.module("credits", ["accordion", "credit.payment.details", "credit.thumbnail", "locale", "templates"]).component("habboCredits", {
  660. bindings: {
  661. items: "<",
  662. selectedCategory: "@"
  663. },
  664. controllerAs: "CreditsController",
  665. templateUrl: "shop/store/inventory/credits.html"
  666. }),
  667. angular.module("category.filter", ["locale", "templates"]).component("habboCategoryFilter", {
  668. bindings: {
  669. paymentCategories: "<",
  670. selectedCategory: "="
  671. },
  672. controller: ["$location", function(e) {
  673. var t = this;
  674. t.isActive = function(e) {
  675. return e === t.selectedCategory || "all" === e && !t.selectedCategory
  676. }
  677. ,
  678. t.update = function(o) {
  679. var r = t.selectedCategory;
  680. t.selectedCategory = "all" === o ? null : o,
  681. t.selectedCategory !== r && e.search(_.extend(e.search(), {
  682. category: t.selectedCategory
  683. }))
  684. }
  685. }
  686. ],
  687. controllerAs: "CategoryFilterController",
  688. templateUrl: "shop/store/category-filter/category-filter.html"
  689. }),
  690. angular.module("subscription.payment.details", ["locale", "payment.info", "payment.steps", "product.icon", "templates"]).component("habboSubscriptionPaymentDetails", {
  691. bindings: {
  692. item: "<"
  693. },
  694. controllerAs: "SubscriptionPaymentDetailsController",
  695. templateUrl: "shop/payment-details/subscription-payment-details/subscription-payment-details.html"
  696. }),
  697. angular.module("product.payment.details", ["payment.info", "payment.steps", "product.icon", "sub.product.icons", "templates"]).component("habboProductPaymentDetails", {
  698. bindings: {
  699. item: "<",
  700. selectedCategory: "@"
  701. },
  702. controllerAs: "ProductPaymentDetailsController",
  703. templateUrl: "shop/payment-details/product-payment-details/product-payment-details.html"
  704. }),
  705. angular.module("payment.steps", ["config", "locale", "payment.adyen", "payment.disclaimer", "payment.methods", "payment.premium.sms", "security", "templates"]).component("habboPaymentSteps", {
  706. bindings: {
  707. item: "<",
  708. selectedCategory: "@"
  709. },
  710. controller: ["$scope", "CONFIG", "EVENTS", "Session", function(e, t, o, r) {
  711. function a() {
  712. i.disclaimerMethod = null ,
  713. i.premiumSmsMethod = null ,
  714. i.adyenMethod = null
  715. }
  716. function n() {
  717. e.$emit(o.accordionUpdate)
  718. }
  719. var i = this;
  720. i.user = r.user,
  721. i.disclaimerMethod = null ,
  722. i.premiumSmsMethod = null ,
  723. i.adyenMethod = null ,
  724. i.setDisclaimer = function(e) {
  725. i.disclaimerMethod = e,
  726. n()
  727. }
  728. ,
  729. i.setPremiumSms = function(e) {
  730. i.premiumSmsMethod = e,
  731. n()
  732. }
  733. ,
  734. i.setAdyen = function(e) {
  735. i.adyenMethod = e,
  736. n()
  737. }
  738. ,
  739. i.reset = function() {
  740. a(),
  741. n()
  742. }
  743. ,
  744. i.getMethodTitleKey = function(e) {
  745. var o = [t.localizationSite, e.localizationKey].join("_");
  746. return ["SHOP_PAYMENTMETHOD_TITLE", o].join("_").toUpperCase()
  747. }
  748. ,
  749. e.$on(o.accordionClose, a)
  750. }
  751. ],
  752. controllerAs: "PaymentStepsController",
  753. templateUrl: "shop/payment-details/payment-steps/payment-steps.html",
  754. transclude: !0
  755. }),
  756. angular.module("payment.info", ["locale", "templates"]).directive("habboPaymentInfo", function() {
  757. return {
  758. restrict: "E",
  759. scope: {},
  760. templateUrl: function(e, t) {
  761. return ["shop/payment-details/payment-info/payment-info-", t.type, ".html"].join("")
  762. }
  763. }
  764. }),
  765. angular.module("offer.payment.details", ["locale", "payment.info", "payment.steps", "templates"]).component("habboOfferPaymentDetails", {
  766. bindings: {
  767. offerPaymentDetails: "<"
  768. },
  769. controllerAs: "OfferPaymentDetailsController",
  770. templateUrl: "shop/payment-details/offer-payment-details/offer-payment-details.html"
  771. }),
  772. angular.module("credit.payment.details", ["credit.icon", "credit.title", "locale", "payment.info", "payment.steps", "templates"]).component("habboCreditPaymentDetails", {
  773. bindings: {
  774. item: "<",
  775. selectedCategory: "@"
  776. },
  777. controllerAs: "CreditPaymentDetailsController",
  778. templateUrl: "shop/payment-details/credit-payment-details/credit-payment-details.html"
  779. }),
  780. angular.module("earn.credits.frame", ["locale", "security", "templates"]).component("habboEarnCreditsFrame", {
  781. bindings: {
  782. offerWallUrl: "@"
  783. },
  784. controllerAs: "EarnCreditsFrameController",
  785. templateUrl: "shop/earn-credits/earn-credits-frame/earn-credits-frame.html"
  786. }),
  787. angular.module("credit.card.icon", ["templates"]).component("habboCreditCardIcon", {
  788. bindings: {
  789. credits: "<?",
  790. product: "<?"
  791. },
  792. controllerAs: "CreditCardIconController",
  793. templateUrl: "shop/credit-card-form/credit-card-icon/credit-card-icon.html"
  794. }),
  795. angular.module("activation.status", ["locale", "message.container", "notifier", "security", "settings.service", "templates"]).component("habboActivationStatus", {
  796. controller: ["Session", "notifier", "settings", function(e, t, o) {
  797. var r = this;
  798. r.user = e.user,
  799. r.resendInProgress = !1,
  800. r.isSent = !1,
  801. r.resend = function() {
  802. r.resendInProgress = !0,
  803. o.resendActivationEmail().then(function() {
  804. r.isSent = !0,
  805. t.success("ACTIVATION_RESEND_SUCESS")
  806. })["catch"](function() {
  807. t.error("ERROR_SERVER")
  808. })["finally"](function() {
  809. r.resendInProgress = !1
  810. })
  811. }
  812. }
  813. ],
  814. controllerAs: "ActivationStatusController",
  815. templateUrl: "settings/email-change/activation-status/activation-status.html"
  816. }),
  817. angular.module("avatar.selector", ["avatar.service", "imager", "locale", "notifier", "security", "templates"]).component("habboAvatarSelector", {
  818. bindings: {
  819. avatar: "<"
  820. },
  821. controller: ["$window", "Session", "avatar", "notifier", function(e, t, o, r) {
  822. var a = this;
  823. a.isSelected = a.avatar.uniqueId === t.user.uniqueId,
  824. a.selectionInProgress = !1,
  825. a.select = function() {
  826. a.selectionInProgress = !0,
  827. o.select(a.avatar).then(function() {
  828. e.location.href = "/settings/avatars"
  829. })["catch"](function() {
  830. r.error("ERROR_SERVER"),
  831. a.selectionInProgress = !1
  832. })
  833. }
  834. }
  835. ],
  836. controllerAs: "AvatarSelectorController",
  837. templateUrl: "settings/avatar-selection/avatar-search/avatar-selector.html"
  838. }),
  839. angular.module("avatar.search", ["avatar.selector", "by.name.description.or.motto.filter", "empty.results", "form", "templates"]).component("habboAvatarSearch", {
  840. bindings: {
  841. avatars: "<"
  842. },
  843. controllerAs: "AvatarSearchController",
  844. templateUrl: "settings/avatar-selection/avatar-search/avatar-search.html"
  845. }),
  846. angular.module("avatar.name.check", ["avatar.service"]).directive("habboAvatarNameCheck", ["$q", "avatar", function(e, t) {
  847. return {
  848. restrict: "A",
  849. require: "ngModel",
  850. link: function(o, r, a, n) {
  851. n.$asyncValidators.name = function(o, r) {
  852. return r ? t.isNameAvailable(r) : e.when()
  853. }
  854. }
  855. }
  856. }
  857. ]),
  858. angular.module("avatar.create.modal", ["avatar.create.form", "templates", "ui.bootstrap"]).factory("avatarCreateModal", ["$uibModal", function(e) {
  859. var t, o = {};
  860. return o.open = function() {
  861. return t = e.open({
  862. size: "sm",
  863. templateUrl: "settings/avatar-selection/avatar-create/avatar-create-modal.html"
  864. }),
  865. t.result
  866. }
  867. ,
  868. o
  869. }
  870. ]),
  871. angular.module("avatar.create.form", ["avatar.name.check", "avatar.service", "locale", "notifier", "templates"]).component("habboAvatarCreateForm", {
  872. bindings: {
  873. onCreate: "&",
  874. onCancel: "&"
  875. },
  876. controller: ["$scope", "avatar", "notifier", function(e, t, o) {
  877. var r = this;
  878. r.createInProgress = !1,
  879. r.create = function() {
  880. e.avatarCreateForm.$valid && !e.avatarCreateForm.$pending && (r.createInProgress = !0,
  881. t.create(r.name).then(r.onCreate)["catch"](function(e) {
  882. 403 !== e.status && o.error("ERROR_SERVER")
  883. })["finally"](function() {
  884. r.createInProgress = !1
  885. }))
  886. }
  887. }
  888. ],
  889. controllerAs: "AvatarCreateFormController",
  890. templateUrl: "settings/avatar-selection/avatar-create/avatar-create-form.html"
  891. }),
  892. angular.module("avatar.create", ["avatar.create.modal", "locale", "security", "templates"]).directive("habboAvatarCreate", ["$window", "Session", "avatarCreateModal", "safetyLockModal", function(e, t, o, r) {
  893. return {
  894. restrict: "E",
  895. scope: {
  896. avatars: "="
  897. },
  898. templateUrl: "settings/avatar-selection/avatar-create/avatar-create.html",
  899. link: function(a) {
  900. function n() {
  901. o.open().then(function() {
  902. e.location.href = "/hotel"
  903. })
  904. }
  905. a.emailVerified = t.user.emailVerified,
  906. a.identityVerified = t.user.identityVerified,
  907. a.MAX_AVATARS = 50,
  908. a.open = function() {
  909. t.isTrusted() ? n() : r.open().then(n)
  910. }
  911. }
  912. }
  913. }
  914. ]),
  915. angular.module("safety.questions.modal", ["safety.questions.form", "templates", "ui.bootstrap"]).factory("safetyQuestionsModal", ["$uibModal", function(e) {
  916. var t, o = {};
  917. return o.open = function() {
  918. return t = e.open({
  919. templateUrl: "settings/account-security/safety-questions/safety-questions-modal.html"
  920. }),
  921. t.result
  922. }
  923. ,
  924. o
  925. }
  926. ]),
  927. angular.module("safety.questions.form", ["account.security.service", "form", "locale", "notifier", "safety.question.filters", "templates"]).constant("QUESTIONS", _.range(1, 10).map(function(e) {
  928. return {
  929. questionId: e.toString(),
  930. questionKey: "IDENTITY_SAFETYQUESTION_" + e
  931. }
  932. })).component("habboSafetyQuestionsForm", {
  933. bindings: {
  934. onSave: "&",
  935. onCancel: "&"
  936. },
  937. controller: ["$scope", "QUESTIONS", "accountSecurity", "notifier", function(e, t, o, r) {
  938. var a = this;
  939. a.saveInProgress = !1,
  940. a.questions = t,
  941. a.selectedQuestion1 = a.questions[0],
  942. a.selectedQuestion2 = a.questions[1],
  943. a.save = function() {
  944. e.safetyQuestionsForm.$valid && (a.saveInProgress = !0,
  945. o.save(a.selectedQuestion1.questionId, a.answer1, a.selectedQuestion2.questionId, a.answer2, a.password).then(function() {
  946. a.onSave(),
  947. r.success("ACCOUNT_SECURITY_SAVED_OK")
  948. })["catch"](function(t) {
  949. var o = t.data && t.data.error;
  950. "invalid_password" === o ? e.$broadcast("remote-data-invalid", "password") : 403 !== t.status && r.error("ERROR_SERVER")
  951. })["finally"](function() {
  952. a.saveInProgress = !1
  953. }))
  954. }
  955. }
  956. ],
  957. controllerAs: "SafetyQuestionsFormController",
  958. templateUrl: "settings/account-security/safety-questions/safety-questions-form.html"
  959. }),
  960. angular.module("safety.question.filters", []).filter("question", function() {
  961. return function(e, t) {
  962. return _.without(e, t)
  963. }
  964. }),
  965. angular.module("security.login.rpx", ["locale", "security.rpx"]).directive("habboRpxLogin", ["$timeout", "rpxSecurity", function(e, t) {
  966. return {
  967. restrict: "E",
  968. scope: {},
  969. template: '<a class="janrainEngage" translate="LOGIN_RPX"></a>',
  970. link: function(o, r) {
  971. var a = e(t.init);
  972. r.on("$destroy", function() {
  973. e.cancel(a),
  974. t.destroy()
  975. })
  976. }
  977. }
  978. }
  979. ]),
  980. angular.module("security.facebook.connect", ["locale", "notifier", "security.service", "templates"]).component("habboFacebookConnect", {
  981. bindings: {
  982. onLogin: "&",
  983. translationKey: "@"
  984. },
  985. controller: ["notifier", "security", function(e, t) {
  986. var o = this;
  987. o.loginInProgress = !1,
  988. o.fbLogin = function() {
  989. o.loginInProgress = !0,
  990. t.fbLogin().then(o.onLogin)["catch"](function(t) {
  991. var o = t.data && t.data.message;
  992. "fb.sdk_not_loaded" === o ? e.error("ERROR_FB_SDK") : "unknown" !== t.status && "force.pending" !== t.status && e.error("ERROR_SERVER")
  993. })["finally"](function() {
  994. o.loginInProgress = !1
  995. })
  996. }
  997. }
  998. ],
  999. controllerAs: "FacebookConnectController",
  1000. templateUrl: "security/login/facebook-connect/facebook-connect.html"
  1001. }),
  1002. angular.module("recover.password.modal", ["claim.password.form", "locale", "templates", "ui.bootstrap"]).controller("RecoverPasswordController", ["email", function(e) {
  1003. var t = this;
  1004. t.email = e
  1005. }
  1006. ]).factory("recoverPasswordModal", ["$uibModal", function(e) {
  1007. var t = {};
  1008. return t.open = function(t) {
  1009. return e.open({
  1010. controller: "RecoverPasswordController",
  1011. controllerAs: "RecoverPasswordController",
  1012. resolve: {
  1013. email: _.constant(t)
  1014. },
  1015. size: "sm",
  1016. templateUrl: "security/login/claim-password/recover-password-modal.html"
  1017. }).result
  1018. }
  1019. ,
  1020. t
  1021. }
  1022. ]),
  1023. angular.module("claim.password.form", ["form", "locale", "notifier", "password.reset.service", "templates"]).component("habboClaimPasswordForm", {
  1024. bindings: {
  1025. cancel: "&",
  1026. emailAddress: "<?"
  1027. },
  1028. controller: ["$scope", "notifier", "passwordReset", function(e, t, o) {
  1029. var r = this;
  1030. r.sent = !1,
  1031. r.sendingInProgress = !1,
  1032. r.send = function() {
  1033. e.claimPasswordForm.$valid && (r.sendingInProgress = !0,
  1034. o.send(r.emailAddress).then(function(e) {
  1035. r.emailAddress = e.data.email,
  1036. r.sent = !0
  1037. })["catch"](function() {
  1038. t.error("ERROR_SERVER")
  1039. })["finally"](function() {
  1040. r.sendingInProgress = !1
  1041. }))
  1042. }
  1043. }
  1044. ],
  1045. controllerAs: "ClaimPasswordFormController",
  1046. templateUrl: "security/login/claim-password/claim-password-form.html",
  1047. transclude: !0
  1048. }),
  1049. angular.module("claim.password", ["claim.password.form", "form", "locale", "templates", "ui.bootstrap"]).factory("claimPasswordModal", ["$uibModal", function(e) {
  1050. var t = {};
  1051. return t.open = function() {
  1052. return e.open({
  1053. size: "sm",
  1054. templateUrl: "security/login/claim-password/claim-password-modal.html"
  1055. }).result
  1056. }
  1057. ,
  1058. t
  1059. }
  1060. ]).component("habboClaimPassword", {
  1061. controller: ["claimPasswordModal", function(e) {
  1062. var t = this;
  1063. t.openModal = e.open
  1064. }
  1065. ],
  1066. controllerAs: "ClaimPasswordController",
  1067. template: '<small><a ng-click="ClaimPasswordController.openModal()" translate="LOGIN_FORGOT_LABEL"></a></small>'
  1068. }),
  1069. angular.module("captcha.modal", ["form", "templates", "ui.bootstrap"]).controller("CaptchaController", ["$scope", "$uibModalInstance", function(e, t) {
  1070. e.$watch("captchaToken", function(e) {
  1071. e && t.close(e)
  1072. })
  1073. }
  1074. ]).factory("captchaModal", ["$uibModal", function(e) {
  1075. var t = {};
  1076. return t.open = function() {
  1077. return e.open({
  1078. controller: "CaptchaController",
  1079. size: "sm",
  1080. templateUrl: "security/login/captcha-modal/captcha-modal.html",
  1081. windowClass: "captcha-modal"
  1082. }).result
  1083. }
  1084. ,
  1085. t
  1086. }
  1087. ]),
  1088. angular.module("security.force.tos.modal", ["locale", "security.force.service", "security.force.tos.form", "templates", "ui.bootstrap"]).factory("forceTOSModal", ["$uibModal", "FORCE", function(e, t) {
  1089. var o = {};
  1090. return o.open = function(o) {
  1091. return e.open({
  1092. size: "sm",
  1093. templateUrl: "security/force/force-tos/force-tos-modal.html"
  1094. }).result.then(function() {
  1095. return o.force = _.without(o.force, t.TOS),
  1096. o
  1097. })
  1098. }
  1099. ,
  1100. o
  1101. }
  1102. ]),
  1103. angular.module("security.force.tos.form", ["locale", "notifier", "security.force.service", "templates"]).component("habboForceTosForm", {
  1104. bindings: {
  1105. onDismiss: "&",
  1106. onSuccess: "&"
  1107. },
  1108. controller: ["$scope", "force", "notifier", function(e, t, o) {
  1109. var r = this;
  1110. r.acceptInProgress = !1,
  1111. r.accept = function() {
  1112. r.acceptInProgress = !0,
  1113. t.acceptTOS().then(function() {
  1114. r.onSuccess(),
  1115. o.success("FORCED_TOS_CHANGE_SUCCESS")
  1116. })["catch"](function() {
  1117. o.error("ERROR_SERVER")
  1118. })["finally"](function() {
  1119. r.acceptInProgress = !1
  1120. })
  1121. }
  1122. }
  1123. ],
  1124. controllerAs: "ForceTosFormController",
  1125. templateUrl: "security/force/force-tos/force-tos-form.html"
  1126. }),
  1127. angular.module("security.force.password.modal", ["locale", "security.force.password.form", "security.force.service", "templates", "ui.bootstrap"]).factory("forcePasswordModal", ["$uibModal", "FORCE", function(e, t) {
  1128. var o = {};
  1129. return o.open = function(o) {
  1130. return e.open({
  1131. size: "sm",
  1132. templateUrl: "security/force/force-password/force-password-modal.html"
  1133. }).result.then(function() {
  1134. return o.force = _.without(o.force, t.password),
  1135. o
  1136. })
  1137. }
  1138. ,
  1139. o
  1140. }
  1141. ]),
  1142. angular.module("security.force.password.form", ["form", "locale", "notifier", "security.force.service", "templates"]).component("habboForcePasswordForm", {
  1143. bindings: {
  1144. onDismiss: "&",
  1145. onSuccess: "&"
  1146. },
  1147. controller: ["$scope", "force", "notifier", function(e, t, o) {
  1148. var r = this;
  1149. r.changeInProgress = !1,
  1150. r.passwords = {},
  1151. r.change = function() {
  1152. e.forcePasswordChangeForm.$valid && (r.changeInProgress = !0,
  1153. t.changePassword(r.passwords.password).then(function() {
  1154. r.onSuccess(),
  1155. o.success("PASSWORD_CHANGE_SUCCESS")
  1156. })["catch"](function(t) {
  1157. var r = t.data && t.data.error;
  1158. "password.too_similar_to_username" === r ? e.$broadcast("remote-data-invalid", "passwordName") : "password.too_similar_to_email" === r ? e.$broadcast("remote-data-invalid", "passwordEmail") : o.error("ERROR_SERVER")
  1159. })["finally"](function() {
  1160. r.changeInProgress = !1
  1161. }))
  1162. }
  1163. }
  1164. ],
  1165. controllerAs: "ForcePasswordFormController",
  1166. templateUrl: "security/force/force-password/force-password-form.html"
  1167. }),
  1168. angular.module("security.force.email.modal", ["locale", "security.force.email.form", "security.force.service", "templates", "ui.bootstrap"]).controller("ForceEmailController", ["emailAddress", function(e) {
  1169. var t = this;
  1170. t.oldEmailAddress = e
  1171. }
  1172. ]).factory("forceEmailModal", ["$uibModal", "FORCE", function(e, t) {
  1173. var o = {};
  1174. return o.open = function(o) {
  1175. return e.open({
  1176. controller: "ForceEmailController",
  1177. controllerAs: "ForceEmailController",
  1178. size: "sm",
  1179. templateUrl: "security/force/force-email/force-email-modal.html",
  1180. resolve: {
  1181. emailAddress: _.constant(o.email)
  1182. }
  1183. }).result.then(function(e) {
  1184. return o.email = e,
  1185. o.force = _.without(o.force, t.email),
  1186. o
  1187. })
  1188. }
  1189. ,
  1190. o
  1191. }
  1192. ]),
  1193. angular.module("security.force.email.form", ["form", "locale", "notifier", "security.force.service", "templates"]).component("habboForceEmailForm", {
  1194. bindings: {
  1195. oldEmailAddress: "@",
  1196. onDismiss: "&",
  1197. onSuccess: "&"
  1198. },
  1199. controller: ["$scope", "force", "notifier", function(e, t, o) {
  1200. var r = this;
  1201. r.saveInProgress = !1,
  1202. r.save = function() {
  1203. e.forceEmailChangeForm.$valid && (r.saveInProgress = !0,
  1204. t.changeEmail(r.emailAddress).then(function(e) {
  1205. r.onSuccess({
  1206. email: e.email
  1207. }),
  1208. o.success("EMAIL_FORCE_CHANGE_SUCCESS")
  1209. })["catch"](function(t) {
  1210. var r = t.data && t.data.error;
  1211. "forcedEmailChange.email_already_in_use" === r ? e.$broadcast("remote-data-invalid", "emailUsedInChange") : o.error("ERROR_SERVER")
  1212. })["finally"](function() {
  1213. r.saveInProgress = !1
  1214. }))
  1215. }
  1216. }
  1217. ],
  1218. controllerAs: "ForceEmailFormController",
  1219. templateUrl: "security/force/force-email/force-email-form.html"
  1220. }),
  1221. angular.module("room.icon", ["remove.on.error", "show.on.load", "templates"]).component("habboRoomIcon", {
  1222. bindings: {
  1223. url: "@"
  1224. },
  1225. controllerAs: "RoomIconController",
  1226. templateUrl: "profile/item-lists/room-icon/room-icon.html"
  1227. }),
  1228. angular.module("report.service", ["config"]).factory("reporter", ["$http", "CONFIG", function(e, t) {
  1229. function o(e) {
  1230. return t.extraDataUrl + "/private/creation/" + e.id + "/report"
  1231. }
  1232. var r = {};
  1233. return r.sendReport = function(t) {
  1234. return e.post(o(t), {
  1235. reason: t.reportReason
  1236. })
  1237. }
  1238. ,
  1239. r
  1240. }
  1241. ]),
  1242. angular.module("report.modal", ["report.form", "templates", "ui.bootstrap"]).controller("ReportController", ["creation", function(e) {
  1243. var t = this;
  1244. t.creation = e
  1245. }
  1246. ]).factory("reportModal", ["$uibModal", function(e) {
  1247. var t, o = {};
  1248. return o.open = function(o) {
  1249. return t = e.open({
  1250. size: "lg",
  1251. controller: "ReportController",
  1252. controllerAs: "ReportController",
  1253. templateUrl: "profile/creation/report/report-modal.html",
  1254. resolve: {
  1255. creation: _.constant(o)
  1256. }
  1257. }),
  1258. t.result
  1259. }
  1260. ,
  1261. o
  1262. }
  1263. ]),
  1264. angular.module("report.form", ["ngMessages", "locale", "notifier", "report.service", "reported.photos", "templates"]).component("habboReportForm", {
  1265. bindings: {
  1266. creation: "<",
  1267. onSuccess: "&",
  1268. onCancel: "&"
  1269. },
  1270. controller: ["$location", "$scope", "notifier", "reportedPhotos", "reporter", function(e, t, o, r, a) {
  1271. var n = this;
  1272. n.sendInProgress = !1,
  1273. n.reasonCodes = [19, 20, 1, 32, 8],
  1274. n.send = function() {
  1275. t.reportForm.$valid && (n.sendInProgress = !0,
  1276. a.sendReport(n.creation).then(function() {
  1277. n.onSuccess(),
  1278. r.save(n.creation.id),
  1279. e.path("/community/photos").replace(),
  1280. o.success("REPORT_SUCCESS")
  1281. })["catch"](function(e) {
  1282. 429 === e.status ? o.error("ERROR_TOO_MANY_REPORTS") : 401 !== e.status && o.error("ERROR_SERVER")
  1283. })["finally"](function() {
  1284. n.sendInProgress = !1
  1285. }))
  1286. }
  1287. }
  1288. ],
  1289. controllerAs: "ReportFormController",
  1290. templateUrl: "profile/creation/report/report-form.html"
  1291. }),
  1292. angular.module("report", ["locale", "report.modal", "templates"]).component("habboReport", {
  1293. bindings: {
  1294. creation: "<"
  1295. },
  1296. controller: ["reportModal", function(e) {
  1297. var t = this;
  1298. t.click = function() {
  1299. e.open(t.creation)
  1300. }
  1301. }
  1302. ],
  1303. controllerAs: "ReportController",
  1304. templateUrl: "profile/creation/report/report.html"
  1305. }),
  1306. angular.module("photo.delete.service", ["ngResource", "config", "storage"]).factory("photoDelete", ["$http", "CONFIG", "httpCache", function(e, t, o) {
  1307. var r = {};
  1308. return r["delete"] = function(r) {
  1309. return e["delete"](t.extraDataUrl + "/private/photo/" + r).then(function() {
  1310. o.shortCache.removeAll()
  1311. })
  1312. }
  1313. ,
  1314. r
  1315. }
  1316. ]),
  1317. angular.module("photo.delete", ["locale", "photo.delete.service", "security", "templates"]).component("habboPhotoDelete", {
  1318. bindings: {
  1319. creation: "<"
  1320. },
  1321. controller: ["$location", "$translate", "$window", "Session", "notifier", "photoDelete", function(e, t, o, r, a, n) {
  1322. function i() {
  1323. n["delete"](s.creation.id).then(function() {
  1324. e.path("/profile/" + r.user.name).replace(),
  1325. a.success("PHOTO_DELETION_SUCCESS")
  1326. })["catch"](function(e) {
  1327. 401 !== e.status && a.error("ERROR_SERVER")
  1328. })
  1329. }
  1330. var s = this;
  1331. s["delete"] = function() {
  1332. t("PHOTO_DELETION_CONFIRMATION").then(function(e) {
  1333. o.confirm(e) && i()
  1334. })
  1335. }
  1336. }
  1337. ],
  1338. controllerAs: "PhotoDeleteController",
  1339. templateUrl: "profile/creation/photo-delete/photo-delete.html"
  1340. }),
  1341. angular.module("interstitial.service", ["client.messenger", "google.analytics"]).factory("interstitial", ["$rootScope", "$timeout", "$window", "clientMessenger", "googleAnalytics", function(e, t, o, r, a) {
  1342. var n = {}
  1343. , i = 15e3;
  1344. return n.started = !1,
  1345. n.loaded = !1,
  1346. n.start = function(s) {
  1347. function l(e) {
  1348. var o = e.originalEvent.data && e.originalEvent.data.category;
  1349. if ("interstitial" === o) {
  1350. var r = e.originalEvent.data && e.originalEvent.data.name;
  1351. f[r] && t(function() {
  1352. f[r](e.originalEvent.data)
  1353. })
  1354. }
  1355. }
  1356. function c() {
  1357. n.loaded = !0,
  1358. b = e.$on("$locationChangeStart", function(e) {
  1359. e.preventDefault()
  1360. })
  1361. }
  1362. function u() {
  1363. a.trackEvent("Interstitial", "Start"),
  1364. t.cancel(g)
  1365. }
  1366. function d(e) {
  1367. var t = _.upperFirst(e.name)
  1368. , o = e.remaining || 0
  1369. , r = e.duration ? 1e3 * (e.duration - o) : null ;
  1370. a.trackEvent("Interstitial", "End", t, r),
  1371. h("complete")
  1372. }
  1373. function m() {
  1374. a.trackEvent("Interstitial", "Error", "Player"),
  1375. h("incomplete")
  1376. }
  1377. function p() {
  1378. a.trackEvent("Interstitial", "Error", "Timeout"),
  1379. h("incomplete")
  1380. }
  1381. function h(e) {
  1382. n.started = !1,
  1383. n.loaded = !1,
  1384. t.cancel(g),
  1385. angular.element(o).off("message", l),
  1386. b && b(),
  1387. "midroll" === s && r.handle({
  1388. interstitial: e
  1389. })
  1390. }
  1391. var b, f = {
  1392. load: c,
  1393. start: u,
  1394. complete: d,
  1395. skip: d,
  1396. error: m
  1397. }, g = t(p, i);
  1398. angular.element(o).on("message", l),
  1399. n.started = !0,
  1400. a.trackEvent("Interstitial", "Init")
  1401. }
  1402. ,
  1403. n.hasStarted = function() {
  1404. return n.started
  1405. }
  1406. ,
  1407. n.hasLoaded = function() {
  1408. return n.loaded
  1409. }
  1410. ,
  1411. n
  1412. }
  1413. ]),
  1414. angular.module("interstitial", ["config", "interstitial.service", "locale", "templates"]).component("habboInterstitial", {
  1415. controller: ["$scope", "CONFIG", "interstitial", function(e, t, o) {
  1416. var r = this;
  1417. r.habboWebAdsUrl = t.habboWebAdsUrl,
  1418. r.lang = t.lang,
  1419. e.$watch(o.hasStarted, function(e) {
  1420. r.started = e
  1421. }),
  1422. e.$watch(o.hasLoaded, function(e) {
  1423. r.loaded = e
  1424. })
  1425. }
  1426. ],
  1427. controllerAs: "InterstitialController",
  1428. templateUrl: "hotel/client/interstitial/interstitial.html"
  1429. }),
  1430. angular.module("client.reload", ["locale", "templates"]).component("habboClientReload", {
  1431. bindings: {
  1432. reload: "&"
  1433. },
  1434. controllerAs: "ClientReloadController",
  1435. templateUrl: "hotel/client/client-reload/client-reload.html"
  1436. }),
  1437. angular.module("client.error", ["config", "locale", "templates"]).component("habboClientError", {
  1438. controller: ["CONFIG", function(e) {
  1439. var t = this;
  1440. t.appStoreUrl = e.appStoreUrl,
  1441. t.googlePlayUrl = e.googlePlayUrl
  1442. }
  1443. ],
  1444. controllerAs: "ClientErrorController",
  1445. templateUrl: "hotel/client/client-error/client-error.html"
  1446. }),
  1447. angular.module("client.closed", ["hotel.closed", "templates"]).component("habboClientClosed", {
  1448. templateUrl: "hotel/client/client-closed/client-closed.html"
  1449. }),
  1450. angular.module("client.close.expander", ["client.close.expand", "events"]).directive("habboClientCloseExpander", ["$timeout", "EVENTS", function(e, t) {
  1451. return {
  1452. restrict: "A",
  1453. link: function(o, r) {
  1454. function a() {
  1455. c(),
  1456. s = e(n, l)
  1457. }
  1458. function n() {
  1459. e(function() {
  1460. o.$broadcast("expander-shrink")
  1461. })
  1462. }
  1463. function i() {
  1464. e.cancel(s),
  1465. e(function() {
  1466. o.$broadcast("expander-expand")
  1467. })
  1468. }
  1469. var s, l = 3e4, c = o.$on(t.clientOpen, a);
  1470. r.mouseenter(i),
  1471. r.mouseleave(n)
  1472. }
  1473. }
  1474. }
  1475. ]),
  1476. angular.module("client.close.expand", ["ngAnimate"]).directive("habboClientCloseExpand", ["$animate", function(e) {
  1477. return {
  1478. restrict: "A",
  1479. link: function(t, o) {
  1480. function r() {
  1481. n(),
  1482. i(c, 0)
  1483. }
  1484. function a() {
  1485. n(),
  1486. i(l, c)
  1487. }
  1488. function n() {
  1489. c || (c = o.width())
  1490. }
  1491. function i(t, r) {
  1492. s && e.cancel(s),
  1493. l = r,
  1494. s = e.animate(o, {
  1495. width: t
  1496. }, {
  1497. width: r
  1498. })
  1499. }
  1500. var s, l, c;
  1501. t.$on("expander-expand", a),
  1502. t.$on("expander-shrink", r)
  1503. }
  1504. }
  1505. }
  1506. ]),
  1507. angular.module("local.register.banner", ["config", "language", "locale", "templates"]).component("habboLocalRegisterBanner", {
  1508. controller: ["CONFIG", "language", function(e, t) {
  1509. var o = this
  1510. , r = t.toSite();
  1511. r && r.hotel !== e.hotel && (o.site = r)
  1512. }
  1513. ],
  1514. controllerAs: "LocalRegisterBannerController",
  1515. templateUrl: "home/register-banner/local-register-banner/local-register-banner.html"
  1516. }),
  1517. angular.module("language", []).factory("language", ["$window", function(e) {
  1518. var t = {};
  1519. return t.toSite = function() {
  1520. var t = e.navigator.language ? e.navigator.language.substr(0, 2) : null ;
  1521. switch (t) {
  1522. case "de":
  1523. return {
  1524. hotel: "hhde",
  1525. href: "https://www.habbo.de",
  1526. localization: "DE",
  1527. title: "Habbo.de"
  1528. };
  1529. case "en":
  1530. return {
  1531. hotel: "hhus",
  1532. href: "https://www.habbo.com",
  1533. localization: "EN",
  1534. title: "Habbo.com"
  1535. };
  1536. case "es":
  1537. return {
  1538. hotel: "hhes",
  1539. href: "https://www.habbo.es",
  1540. localization: "ES",
  1541. title: "Habbo.es"
  1542. };
  1543. case "fr":
  1544. return {
  1545. hotel: "hhfr",
  1546. href: "https://www.habbo.fr",
  1547. localization: "FR",
  1548. title: "Habbo.fr"
  1549. };
  1550. case "fi":
  1551. return {
  1552. hotel: "hhfi",
  1553. href: "https://www.habbo.fi",
  1554. localization: "FI",
  1555. title: "Habbo.fi"
  1556. };
  1557. case "it":
  1558. return {
  1559. hotel: "hhit",
  1560. href: "https://www.habbo.it",
  1561. localization: "IT",
  1562. title: "Habbo.it"
  1563. };
  1564. case "nl":
  1565. return {
  1566. hotel: "hhnl",
  1567. href: "https://www.habbo.nl",
  1568. localization: "NL",
  1569. title: "Habbo.nl"
  1570. };
  1571. case "pt":
  1572. return {
  1573. hotel: "hhbr",
  1574. href: "https://www.habbo.com.br",
  1575. localization: "PT",
  1576. title: "Habbo.com.br"
  1577. };
  1578. case "tr":
  1579. return {
  1580. hotel: "hhtr",
  1581. href: "https://www.habbo.com.tr",
  1582. localization: "TR",
  1583. title: "Habbo.com.tr"
  1584. };
  1585. default:
  1586. return null
  1587. }
  1588. }
  1589. ,
  1590. t
  1591. }
  1592. ]),
  1593. angular.module("moderation.notification", ["google.analytics", "locale", "message.container", "moderation.service", "templates"]).component("habboModerationNotification", {
  1594. controller: ["PhotoModerations", "googleAnalytics", function(e, t) {
  1595. var o = this;
  1596. o.moderations = e.recentModerations(),
  1597. o.moderations.$promise.then(function(e) {
  1598. e.length > 0 && t.trackEvent("Moderation", "Notification viewed")
  1599. })
  1600. }
  1601. ],
  1602. controllerAs: "ModerationNotificationController",
  1603. templateUrl: "home/news/moderation-notification/moderation-notification.html"
  1604. }),
  1605. angular.module("moderation.service", ["ngResource", "config", "storage"]).factory("PhotoModerations", ["$resource", "CONFIG", "httpCache", function(e, t, o) {
  1606. return e(t.extraDataUrl + "/private/moderations/recentModerations", null , {
  1607. recentModerations: {
  1608. method: "GET",
  1609. isArray: !0,
  1610. cache: o.shortCache
  1611. }
  1612. })
  1613. }
  1614. ]),
  1615. angular.module("discussions", ["avatar", "empty.results", "flash", "locale", "templates"]).component("habboDiscussions", {
  1616. bindings: {
  1617. items: "<"
  1618. },
  1619. controller: function() {
  1620. var e = this;
  1621. e.getParticipant = function(e) {
  1622. return _.values(e)[0]
  1623. }
  1624. },
  1625. controllerAs: "DiscussionsController",
  1626. templateUrl: "home/messaging/discussions/discussions.html"
  1627. }),
  1628. angular.module("local.storage", []).factory("localStorage", ["$window", function(e) {
  1629. var t = {};
  1630. return t.get = function(t) {
  1631. try {
  1632. var o = e.localStorage.getItem(t);
  1633. return o ? angular.fromJson(o) : null
  1634. } catch (r) {
  1635. return Bugsnag.notifyException(r, "LocalStorage not supported", {
  1636. groupingHash: "LocalStorage"
  1637. }, "info"),
  1638. null
  1639. }
  1640. }
  1641. ,
  1642. t.set = function(t, o) {
  1643. try {
  1644. e.localStorage.setItem(t, angular.toJson(o))
  1645. } catch (r) {
  1646. Bugsnag.notifyException(r, "LocalStorage not supported", {
  1647. groupingHash: "LocalStorage"
  1648. }, "info")
  1649. }
  1650. }
  1651. ,
  1652. t
  1653. }
  1654. ]),
  1655. angular.module("cache", ["angular-cache", "config"]).config(["CacheFactoryProvider", function(e) {
  1656. angular.extend(e.defaults, {
  1657. maxAge: 3e5,
  1658. deleteOnExpire: "aggressive"
  1659. })
  1660. }
  1661. ]).factory("httpCache", ["CacheFactory", function(e) {
  1662. return {
  1663. shortCache: e.createCache("shortHttpCache"),
  1664. longCache: e.createCache("longHttpCache", {
  1665. maxAge: 36e5
  1666. })
  1667. }
  1668. }
  1669. ]),
  1670. angular.module("user.menu", ["encode.uri.component", "false.on.outside.click", "imager", "locale", "router", "security", "templates", "zendesk.url"]).component("habboUserMenu", {
  1671. controller: ["$state", "Session", "notifier", "security", function(e, t, o, r) {
  1672. var a = this;
  1673. a.user = t.user,
  1674. a.isMyProfileActive = function() {
  1675. return e.is("profile", {
  1676. name: t.user.name
  1677. })
  1678. }
  1679. ,
  1680. a.isSettingsActive = function() {
  1681. return e.includes("settings")
  1682. }
  1683. ,
  1684. a.logout = function() {
  1685. r.logout()["catch"](function() {
  1686. o.errorSticky("ERROR_LOGOUT_TITLE", "ERROR_LOGOUT_TEXT")
  1687. })
  1688. }
  1689. }
  1690. ],
  1691. controllerAs: "UserMenuController",
  1692. templateUrl: "common/header/user-menu/user-menu.html"
  1693. }),
  1694. angular.module("navigation", ["encode.uri.component", "flash", "hotel.button", "locale", "security", "templates"]).component("habboNavigation", {
  1695. bindings: {
  1696. active: "@"
  1697. },
  1698. controllerAs: "NavigationController",
  1699. templateUrl: "common/header/navigation/navigation.html"
  1700. }),
  1701. angular.module("hotel.button", ["locale", "templates"]).component("habboHotelButton", {
  1702. templateUrl: "common/header/hotel-button/hotel-button.html"
  1703. }),
  1704. angular.module("header.ad", ["ad.unit", "templates"]).component("habboHeaderAd", {
  1705. controller: ["$scope", "$location", function(e, t) {
  1706. function o() {
  1707. n.hasAd = r()
  1708. }
  1709. function r() {
  1710. return !_(a).some(function(e) {
  1711. return _(t.path()).includes(e)
  1712. })
  1713. }
  1714. var a = ["/playing-habbo/help", "/registration", "/reset-password", "/settings", "/shop"]
  1715. , n = this;
  1716. o(),
  1717. e.$on("$stateChangeSuccess", o)
  1718. }
  1719. ],
  1720. controllerAs: "HeaderAdController",
  1721. templateUrl: "common/header/header-ad/header-ad.html"
  1722. }),
  1723. angular.module("validators", ["email", "matches", "password.email", "password.name", "password.pattern", "password.strength", "remote.data"]),
  1724. angular.module("search", ["locale", "templates"]).component("habboSearch", {
  1725. bindings: {
  1726. query: "="
  1727. },
  1728. controllerAs: "SearchController",
  1729. templateUrl: "common/form/search/search.html"
  1730. }),
  1731. angular.module("password.new", ["ngMessages", "locale", "password.strength", "password.toggle.mask", "templates", "validators"]).component("habboPasswordNew", {
  1732. require: {
  1733. FormController: "^form"
  1734. },
  1735. bindings: {
  1736. isNew: "@",
  1737. passwordNew: "=",
  1738. passwordNewRepeated: "=",
  1739. userName: "@",
  1740. userEmail: "@"
  1741. },
  1742. controllerAs: "PasswordNewController",
  1743. templateUrl: "common/form/password-new/password-new.html"
  1744. }),
  1745. angular.module("password.toggle.mask", []).directive("habboPasswordToggleMask", function() {
  1746. return {
  1747. restrict: "A",
  1748. link: function(e, t, o) {
  1749. function r(e) {
  1750. angular.element(e.currentTarget).toggleClass("active"),
  1751. o.$set("type", "password" === o.type ? "text" : "password"),
  1752. t.focus()
  1753. }
  1754. t.after(angular.element("<i/>", {
  1755. "class": "password-toggle-mask__icon",
  1756. click: r,
  1757. mousedown: function(e) {
  1758. e.preventDefault()
  1759. }
  1760. }))
  1761. }
  1762. }
  1763. }),
  1764. angular.module("password.current", ["ngMessages", "locale", "templates", "validators"]).component("habboPasswordCurrent", {
  1765. require: {
  1766. FormController: "^form"
  1767. },
  1768. bindings: {
  1769. passwordCurrent: "="
  1770. },
  1771. controllerAs: "PasswordCurrentController",
  1772. templateUrl: "common/form/password-current/password-current.html"
  1773. }),
  1774. angular.module("email.address", ["ngMessages", "locale", "templates", "validators"]).component("habboEmailAddress", {
  1775. require: {
  1776. FormController: "^form"
  1777. },
  1778. bindings: {
  1779. emailAddress: "="
  1780. },
  1781. controllerAs: "EmailAddressController",
  1782. templateUrl: "common/form/email-address/email-address.html",
  1783. transclude: !0
  1784. }),
  1785. angular.module("captcha", ["config", "locale", "noCAPTCHA", "templates"]).constant("CAPTCHA_EVENTS", {
  1786. reset: "captcha-reset"
  1787. }).component("habboCaptcha", {
  1788. require: {
  1789. FormController: "^form"
  1790. },
  1791. bindings: {
  1792. captchaToken: "="
  1793. },
  1794. controller: ["$scope", "CAPTCHA_EVENTS", function(e, t) {
  1795. var o = this;
  1796. o.noCaptchaController = {},
  1797. o.onExpire = function() {
  1798. o.captchaToken = null
  1799. }
  1800. ,
  1801. e.$on(t.reset, function() {
  1802. o.noCaptchaController.reset(),
  1803. o.FormController.captchaToken.$setViewValue(null )
  1804. })
  1805. }
  1806. ],
  1807. controllerAs: "CaptchaController",
  1808. templateUrl: "common/form/captcha/captcha.html"
  1809. }),
  1810. angular.module("columns.profile", ["card", "infinite-scroll", "templates"]).component("habboColumnsProfile", {
  1811. bindings: {
  1812. items: "<"
  1813. },
  1814. controllerAs: "ColumnsProfileController",
  1815. templateUrl: "common/columns/columns-profile/columns-profile.html"
  1816. }),
  1817. angular.module("columns.channel", ["avatar", "card", "infinite-scroll", "templates"]).component("habboColumnsChannel", {
  1818. bindings: {
  1819. items: "<"
  1820. },
  1821. controllerAs: "ColumnsChannelController",
  1822. templateUrl: "common/columns/columns-channel/columns-channel.html"
  1823. }),
  1824. angular.module("card", ["creation.href", "like", "locale", "templates"]).component("habboCard", {
  1825. bindings: {
  1826. item: "<"
  1827. },
  1828. controllerAs: "CardController",
  1829. templateUrl: "common/columns/card/card.html",
  1830. transclude: !0
  1831. }),
  1832. angular.module("ad.double.click", ["config", "locale", "ngDfp", "templates"]).constant("DOUBLE_CLICK_UNITS", {
  1833. inlineRectangle: {
  1834. id: "div-gpt-ad-1",
  1835. size: [300, 250]
  1836. },
  1837. leaderboard: {
  1838. id: "div-gpt-ad-2",
  1839. size: [728, 90]
  1840. },
  1841. mobileLeaderboard: {
  1842. size: [320, 50]
  1843. }
  1844. }).config(["DOUBLE_CLICK_UNITS", "DoubleClickProvider", function(e, t) {
  1845. var o = "/108596585/Habbo_WEB_IAB";
  1846. t.defineSlot(o, [e.inlineRectangle.size], e.inlineRectangle.id).defineSlot(o, [e.leaderboard.size, e.mobileLeaderboard.size], e.leaderboard.id),
  1847. t.defineSizeMapping(e.leaderboard.id).addSize([768, 0], e.leaderboard.size).addSize([0, 0], e.mobileLeaderboard.size)
  1848. }
  1849. ]).component("habboAdDoubleClick", {
  1850. bindings: {
  1851. unit: "@"
  1852. },
  1853. controller: ["$scope", "$timeout", "$window", "DOUBLE_CLICK_UNITS", "DoubleClick", function(e, t, o, r, a) {
  1854. function n() {
  1855. var e = o.innerWidth;
  1856. e !== c && (a.refreshAds(l.id),
  1857. c = e)
  1858. }
  1859. function i() {
  1860. s = t(function() {
  1861. a.refreshAds(l.id)
  1862. })
  1863. }
  1864. var s, l = this, c = o.innerWidth;
  1865. l.id = r[l.unit].id,
  1866. angular.element(o).on("orientationchange resize", n),
  1867. e.$on("$stateChangeSuccess", i),
  1868. e.$on("$destroy", function() {
  1869. t.cancel(s),
  1870. angular.element(o).off("orientationchange resize", n)
  1871. })
  1872. }
  1873. ],
  1874. controllerAs: "AdDoubleClickController",
  1875. templateUrl: "common/ad-unit/ad-double-click/ad-double-click.html"
  1876. }),
  1877. angular.module("voucher.redeem.service", ["config", "google.analytics"]).factory("voucherRedeem", ["$http", "CONFIG", "googleAnalytics", function(e, t, o) {
  1878. return function(r) {
  1879. return e.post(t.shopUrl + "/voucher/redeem", {
  1880. voucherCode: r
  1881. }).then(function(e) {
  1882. return o.trackEvent("Voucher", "Redeemed"),
  1883. e
  1884. })
  1885. }
  1886. }
  1887. ]),
  1888. angular.module("voucher.redeem", ["events", "form", "locale", "notifier", "purse.service", "templates", "voucher.icon", "voucher.redeem.service"]).component("habboVoucherRedeem", {
  1889. controller: ["$compile", "$scope", "$timeout", "$translate", "EVENTS", "notifier", "purse", "voucherRedeem", function(e, t, o, r, a, n, i, s) {
  1890. function l() {
  1891. t.voucherRedeemForm.$setPristine(),
  1892. d.voucherCode = ""
  1893. }
  1894. function c(e) {
  1895. return r("VOUCHER_REDEEM_NOTIFICATION_AWARDED").then(function(r) {
  1896. var a = t.$new();
  1897. a.credits = e.data.credits,
  1898. a.product = e.data.product,
  1899. a.credits && o(function() {
  1900. var e = u(a, '<habbo-voucher-icon credits="credits"></habbo-voucher-icon>');
  1901. n.success(r + " " + e)
  1902. }),
  1903. a.product && o(function() {
  1904. var e = u(a, '<habbo-voucher-icon product="product"></habbo-voucher-icon>');
  1905. n.success(r + " " + e)
  1906. })
  1907. })
  1908. }
  1909. function u(t, o) {
  1910. var r = e(angular.element("<div>" + o + "</div>"))(t);
  1911. return t.$digest(),
  1912. r.html()
  1913. }
  1914. var d = this;
  1915. d.redeemInProgress = !1,
  1916. d.redeem = function() {
  1917. t.voucherRedeemForm.$valid && (d.redeemInProgress = !0,
  1918. s(d.voucherCode).then(function(e) {
  1919. return l(),
  1920. i.update(),
  1921. c(e)
  1922. })["catch"](function(e) {
  1923. var o = e.data && e.data.error;
  1924. "purse.redeem.code.dont_exist" === o ? t.$broadcast("remote-data-invalid", "nonexistent") : "purse.redeem.code.already_redeemed" === o ? t.$broadcast("remote-data-invalid", "redeemed") : t.$broadcast("remote-data-invalid", "failed")
  1925. })["finally"](function() {
  1926. d.redeemInProgress = !1
  1927. }))
  1928. }
  1929. ,
  1930. t.$on(a.accordionClose, l),
  1931. t.$watchGroup(["voucherRedeemForm.$invalid", "voucherRedeemForm.$pristine", "voucherRedeemForm.$submitted"], function() {
  1932. t.$emit(a.accordionUpdate)
  1933. })
  1934. }
  1935. ],
  1936. controllerAs: "VoucherRedeemController",
  1937. templateUrl: "shop/voucher-redeem/voucher-redeem.html"
  1938. }),
  1939. angular.module("transactions", ["locale", "router", "shop.purse", "shop.service", "shop.transactions.list", "templates", "voucher.redeem", "web.pages"]).config(["$stateProvider", function(e) {
  1940. e.statePrivate("shop.transactions", {
  1941. url: "/history",
  1942. data: {
  1943. title: "HEAD_TITLE_SHOP_HISTORY"
  1944. },
  1945. controller: "TransactionsController",
  1946. controllerAs: "TransactionsController",
  1947. resolve: {
  1948. transactions: ["Shop", function(e) {
  1949. return e.history().$promise
  1950. }
  1951. ]
  1952. },
  1953. parent: "shop",
  1954. templateUrl: "shop/transactions/transactions.html"
  1955. })
  1956. }
  1957. ]).controller("TransactionsController", ["transactions", function(e) {
  1958. var t = this;
  1959. t.items = e
  1960. }
  1961. ]),
  1962. angular.module("shop.transactions.list", ["empty.results", "locale", "shop.transactions.history", "templates"]).component("habboTransactionsList", {
  1963. bindings: {
  1964. transactions: "<"
  1965. },
  1966. controller: function() {
  1967. var e = this;
  1968. e.transactionLimit = 10,
  1969. e.showAll = function() {
  1970. e.transactionLimit = 1 / 0,
  1971. e.hideShowAll = !0
  1972. }
  1973. },
  1974. controllerAs: "TransactionsListController",
  1975. templateUrl: "shop/transactions/transactions-list.html"
  1976. }),
  1977. angular.module("subscriptions", ["events", "locale", "router", "shop.countries", "shop.purse", "subscription", "subscriptions.service", "templates", "voucher.redeem", "web.pages"]).config(["$stateProvider", function(e) {
  1978. e.statePrivate("shop.subscriptions", {
  1979. url: "/subscriptions",
  1980. controller: "SubscriptionsController",
  1981. controllerAs: "SubscriptionsController",
  1982. parent: "shop",
  1983. data: {
  1984. title: "HEAD_TITLE_SHOP_SUBSCRIPTIONS"
  1985. },
  1986. resolve: {
  1987. subscriptions: ["countryCode", "Subscriptions", function(e, t) {
  1988. return t.inventory({
  1989. countryCode: e
  1990. }).$promise
  1991. }
  1992. ]
  1993. },
  1994. templateUrl: "shop/subscriptions/subscriptions.html"
  1995. })
  1996. }
  1997. ]).controller("SubscriptionsController", ["$scope", "EVENTS", "SUBSCRIPTION_EVENTS", "Subscriptions", "countryCode", "subscriptions", function(e, t, o, r, a, n) {
  1998. function i() {
  1999. r.inventory({
  2000. countryCode: s.countryCode
  2001. }).$promise.then(function(e) {
  2002. s.subscriptions = e
  2003. })
  2004. }
  2005. var s = this;
  2006. s.countryCode = a,
  2007. s.subscriptions = n,
  2008. e.$on(t.shopPaymentClose, i),
  2009. e.$on(o.cancel, i)
  2010. }
  2011. ]),
  2012. angular.module("subscriptions.service", ["ngResource", "config", "safe.transform.response", "storage"]).factory("Subscriptions", ["$resource", "CONFIG", "safeTransformResponse", function(e, t, o) {
  2013. function r(e) {
  2014. return function(t) {
  2015. return t.countryCode = e,
  2016. t
  2017. }
  2018. }
  2019. return e(t.shopUrl + "/subscription/:resource/:countryCode/:subscriptionType", {}, {
  2020. inventory: {
  2021. params: {
  2022. resource: "inventory"
  2023. },
  2024. transformResponse: o.fromJson(function(e) {
  2025. var t = e.selectedCountry;
  2026. return {
  2027. countries: e.countries,
  2028. items: _.map(e.items, r(t.countryCode)),
  2029. selectedCountry: e.selectedCountry
  2030. }
  2031. })
  2032. },
  2033. cancel: {
  2034. params: {
  2035. resource: "cancel"
  2036. },
  2037. method: "POST"
  2038. }
  2039. })
  2040. }
  2041. ]),
  2042. angular.module("store", ["category.filter", "events", "locale", "router", "shop.countries", "shop.inventory", "shop.purse", "shop.service", "shop.targeted.offer", "templates", "voucher.redeem", "web.pages"]).config(["$stateProvider", function(e) {
  2043. e.statePublic("shop.store", {
  2044. url: "?category",
  2045. controller: "StoreController",
  2046. controllerAs: "StoreController",
  2047. data: {
  2048. title: "HEAD_TITLE_SHOP"
  2049. },
  2050. resolve: {
  2051. countries: ["Shop", function(e) {
  2052. return e.countries().$promise
  2053. }
  2054. ],
  2055. inventory: ["countryCode", "Shop", function(e, t) {
  2056. return t.inventory({
  2057. countryCode: e
  2058. }).$promise
  2059. }
  2060. ]
  2061. },
  2062. parent: "shop",
  2063. templateUrl: "shop/store/store.html"
  2064. })
  2065. }
  2066. ]).controller("StoreController", ["$interval", "$location", "$scope", "$state", "$stateParams", "EVENTS", "countries", "inventory", "scrolltop", function(e, t, o, r, a, n, i, s, l) {
  2067. var c, u = this;
  2068. u.countries = i,
  2069. u.offer = s.offer,
  2070. u.inventory = s,
  2071. u.selectedCategory = a.category,
  2072. u.offer && (c = e(function() {
  2073. moment(u.offer.expirationDate).isBefore() && (u.offer = null ,
  2074. e.cancel(c))
  2075. }, 1e3)),
  2076. o.$on("$stateChangeStart", function(e, t) {
  2077. l.setEnabled("shop.store" !== t.name)
  2078. }),
  2079. o.$on(n.securityLogin, function() {
  2080. "/shop" === t.path() && r.reload()
  2081. })
  2082. }
  2083. ]),
  2084. angular.module("shop.footer", ["locale", "templates", "zendesk.url"]).component("habboShopFooter", {
  2085. templateUrl: "shop/shop-footer/shop-footer.html"
  2086. }),
  2087. angular.module("shop.countries", ["locale", "templates"]).component("habboShopCountries", {
  2088. bindings: {
  2089. country: "<",
  2090. countries: "<"
  2091. },
  2092. controller: ["$scope", "$location", function(e, t) {
  2093. e.$watch("ShopCountriesController.country", function(e, o) {
  2094. var r = e && e.countryCode || null
  2095. , a = o && o.countryCode || null ;
  2096. r && r !== a && t.search({
  2097. country: r
  2098. })
  2099. })
  2100. }
  2101. ],
  2102. controllerAs: "ShopCountriesController",
  2103. templateUrl: "shop/shop-countries/shop-countries.html"
  2104. }),
  2105. angular.module("purse.service", ["ngResource", "config"]).factory("purse", ["$resource", "CONFIG", function(e, t) {
  2106. var o = {}
  2107. , r = {
  2108. creditBalance: "...",
  2109. diamondBalance: "...",
  2110. habboClubDays: "...",
  2111. buildersClubDays: "..."
  2112. }
  2113. , a = e(t.shopUrl + "/purse");
  2114. return o.get = function() {
  2115. return r
  2116. }
  2117. ,
  2118. o.update = function() {
  2119. a.get().$promise.then(function(e) {
  2120. r = e
  2121. })
  2122. }
  2123. ,
  2124. o
  2125. }
  2126. ]),
  2127. angular.module("shop.purse", ["config", "locale", "purse.service", "templates"]).component("habboPurse", {
  2128. controller: ["$scope", "purse", function(e, t) {
  2129. var o = this;
  2130. t.update(),
  2131. e.$watch(t.get, function(e) {
  2132. o.purse = e
  2133. })
  2134. }
  2135. ],
  2136. controllerAs: "PurseController",
  2137. templateUrl: "shop/purse/purse.html"
  2138. }),
  2139. angular.module("product.icon", []).component("habboProductIcon", {
  2140. bindings: {
  2141. iconId: "@"
  2142. },
  2143. controllerAs: "ProductIconController",
  2144. template: '<div ng-class="\'product-icon--\' + ProductIconController.iconId" class="product-icon"></div>'
  2145. }),
  2146. angular.module("prepaid", ["compile", "locale", "router", "shop.purse", "shop.service", "templates", "voucher.redeem", "web.pages"]).config(["$stateProvider", function(e) {
  2147. e.statePublic("shop.prepaid", {
  2148. url: "/prepaid",
  2149. controller: "PrepaidController",
  2150. controllerAs: "PrepaidController",
  2151. data: {
  2152. title: "HEAD_TITLE_SHOP_PREPAID"
  2153. },
  2154. resolve: {
  2155. countries: ["Shop", function(e) {
  2156. return e.countries().$promise
  2157. }
  2158. ],
  2159. country: ["countries", "countryCode", function(e, t) {
  2160. return _(e).find({
  2161. countryCode: t
  2162. }) || _(e).find({
  2163. countryCode: "all"
  2164. }) || e[0]
  2165. }
  2166. ],
  2167. page: ["country", "webPages", function(e, t) {
  2168. return t.get("store/prepaid/prepaid_" + e.countryCode)
  2169. }
  2170. ]
  2171. },
  2172. parent: "shop",
  2173. templateUrl: "shop/prepaid/prepaid.html"
  2174. })
  2175. }
  2176. ]).controller("PrepaidController", ["countries", "country", "page", function(e, t, o) {
  2177. var r = this;
  2178. r.countries = e,
  2179. r.country = t,
  2180. r.page = o
  2181. }
  2182. ]),
  2183. angular.module("earn.credits", ["earn.credits.frame", "earn.credits.service", "locale", "router", "shop.purse", "templates", "web.pages"]).config(["$stateProvider", function(e) {
  2184. e.statePrivate("shop.earnCredits", {
  2185. url: "/earn-credits",
  2186. controller: "EarnCreditsController",
  2187. controllerAs: "EarnCreditsController",
  2188. data: {
  2189. title: "HEAD_TITLE_SHOP_EARN_CREDITS"
  2190. },
  2191. parent: "shop",
  2192. resolve: {
  2193. offerWallUrl: ["OfferWallUrl", function(e) {
  2194. return e.get().$promise
  2195. }
  2196. ]
  2197. },
  2198. templateUrl: "shop/earn-credits/earn-credits.html"
  2199. })
  2200. }
  2201. ]).controller("EarnCreditsController", ["offerWallUrl", function(e) {
  2202. var t = this;
  2203. t.offerWallUrl = e
  2204. }
  2205. ]),
  2206. angular.module("earn.credits.service", ["ngResource", "config"]).factory("OfferWallUrl", ["$resource", "CONFIG", function(e, t) {
  2207. return e(t.shopUrl + "/offerwall/url")
  2208. }
  2209. ]),
  2210. angular.module("credit.title", ["locale", "templates"]).component("habboCreditTitle", {
  2211. bindings: {
  2212. amount: "@",
  2213. doubleCredits: "@"
  2214. },
  2215. controller: function() {
  2216. var e = this;
  2217. e.isDouble = "true" === e.doubleCredits
  2218. },
  2219. controllerAs: "CreditTitleController",
  2220. templateUrl: "shop/credit-title/credit-title.html"
  2221. }),
  2222. angular.module("credit.icon", ["templates"]).component("habboCreditIcon", {
  2223. bindings: {
  2224. amount: "@",
  2225. doubleCredits: "@"
  2226. },
  2227. controller: function() {
  2228. var e = [0, 30, 50, 80, 100, 250, 1e3]
  2229. , t = this;
  2230. t.isDouble = "true" === t.doubleCredits,
  2231. t.getIndex = function(t) {
  2232. var o = _.curry(function(e, t) {
  2233. return t > e
  2234. });
  2235. return _.findIndex(e, o(parseInt(t, 10)))
  2236. }
  2237. },
  2238. controllerAs: "CreditIconController",
  2239. templateUrl: "shop/credit-icon/credit-icon.html"
  2240. }),
  2241. angular.module("credit.card", ["credit-cards", "credit.card.icon", "events", "form", "locale", "notifier", "purse.service", "templates"]).component("habboCreditCardForm", {
  2242. bindings: {
  2243. onSubmit: "&",
  2244. card: "="
  2245. },
  2246. controller: ["$compile", "$rootScope", "$scope", "$timeout", "$translate", "EVENTS", function(e, t, o, r, a, n) {
  2247. var i = this;
  2248. i.paymentInProgress = !1,
  2249. i.markActiveAndSubmit = function(e) {
  2250. i.paymentInProgress = !0,
  2251. i.onSubmit(e).then(function() {
  2252. i.paymentInProgress = !1
  2253. })
  2254. }
  2255. ,
  2256. o.$watch(function() {
  2257. return _.size(o.creditCardForm.$error)
  2258. }, function() {
  2259. t.$broadcast(n.accordionResize)
  2260. })
  2261. }
  2262. ],
  2263. controllerAs: "CreditCardController",
  2264. templateUrl: "shop/credit-card-form/credit-card-form.html"
  2265. }),
  2266. angular.module("privacy.settings", ["locale", "privacy.settings.form", "privacy.settings.service", "router", "templates"]).config(["$stateProvider", function(e) {
  2267. e.statePrivate("settings.privacy", {
  2268. url: "/privacy",
  2269. controller: "PrivacySettingsController",
  2270. controllerAs: "PrivacySettingsController",
  2271. parent: "settings",
  2272. data: {
  2273. title: "HEAD_TITLE_PRIVACY_SETTINGS"
  2274. },
  2275. resolve: {
  2276. privacySettings: ["PrivacySettings", function(e) {
  2277. return e.query().$promise
  2278. }
  2279. ]
  2280. },
  2281. templateUrl: "settings/privacy-settings/privacy-settings.html"
  2282. })
  2283. }
  2284. ]).controller("PrivacySettingsController", ["privacySettings", function(e) {
  2285. var t = this;
  2286. t.privacySettings = e
  2287. }
  2288. ]),
  2289. angular.module("privacy.settings.form", ["google.analytics", "locale", "notifier", "privacy.settings.service", "templates"]).component("habboPrivacySettingsForm", {
  2290. bindings: {
  2291. privacySettings: "<"
  2292. },
  2293. controller: ["$scope", "googleAnalytics", "notifier", function(e, t, o) {
  2294. var r = this;
  2295. r.save = function() {
  2296. e.privacySettingsForm.$pristine ? o.success("SETTINGS_SAVED_OK") : (r.sendInProgress = !0,
  2297. r.privacySettings.$save().then(function() {
  2298. t.trackEvent("Privacy settings", "Saved"),
  2299. o.success("SETTINGS_SAVED_OK"),
  2300. e.privacySettingsForm.$setPristine()
  2301. })["catch"](function() {
  2302. o.error("ERROR_SERVER")
  2303. })["finally"](function() {
  2304. r.sendInProgress = !1
  2305. }))
  2306. }
  2307. }
  2308. ],
  2309. controllerAs: "PrivacySettingsFormController",
  2310. templateUrl: "settings/privacy-settings/privacy-settings-form.html"
  2311. }),
  2312. angular.module("privacy.settings.service", ["ngResource", "config"]).factory("PrivacySettings", ["$resource", "CONFIG", function(e, t) {
  2313. return e(t.apiUrl + "/user/preferences", {}, {
  2314. query: {
  2315. method: "GET",
  2316. isArray: !1
  2317. },
  2318. save: {
  2319. method: "POST",
  2320. url: t.apiUrl + "/user/preferences/save"
  2321. }
  2322. })
  2323. }
  2324. ]),
  2325. angular.module("password.change", ["locale", "password.change.form", "router", "templates"]).config(["$stateProvider", function(e) {
  2326. e.stateHabboAccountTrusted("settings.password", {
  2327. url: "/password",
  2328. parent: "settings",
  2329. data: {
  2330. title: "HEAD_TITLE_PASSWORD_CHANGE"
  2331. },
  2332. templateUrl: "settings/password-change/password-change.html"
  2333. })
  2334. }
  2335. ]),
  2336. angular.module("password.change.form", ["form", "locale", "notifier", "security", "settings.service", "templates"]).component("habboPasswordChangeForm", {
  2337. controller: ["$scope", "Session", "notifier", "settings", function(e, t, o, r) {
  2338. function a() {
  2339. e.changePasswordForm.$setPristine(),
  2340. n.passwords = {}
  2341. }
  2342. var n = this;
  2343. n.user = t.user,
  2344. n.updateInProgress = !1,
  2345. n.update = function() {
  2346. e.changePasswordForm.$valid && (n.updateInProgress = !0,
  2347. r.changePassword(n.passwords).then(function() {
  2348. a(),
  2349. o.success("PASSWORD_CHANGE_SUCCESS")
  2350. })["catch"](function(t) {
  2351. 409 === t.status ? e.$broadcast("remote-data-invalid", "password") : 403 !== t.status && o.error("ERROR_SERVER")
  2352. })["finally"](function() {
  2353. n.updateInProgress = !1
  2354. }))
  2355. }
  2356. }
  2357. ],
  2358. controllerAs: "PasswordChangeFormController",
  2359. templateUrl: "settings/password-change/password-change-form.html"
  2360. }),
  2361. angular.module("email.change", ["activation.status", "email.change.form", "locale", "router", "templates"]).config(["$stateProvider", function(e) {
  2362. e.stateHabboAccountTrusted("settings.email", {
  2363. url: "/email",
  2364. parent: "settings",
  2365. data: {
  2366. title: "HEAD_TITLE_EMAIL_CHANGE"
  2367. },
  2368. templateUrl: "settings/email-change/email-change.html"
  2369. })
  2370. }
  2371. ]),
  2372. angular.module("email.change.form", ["form", "locale", "notifier", "security", "settings.service", "templates"]).component("habboEmailChangeForm", {
  2373. controller: ["$scope", "Session", "notifier", "settings", function(e, t, o, r) {
  2374. function a() {
  2375. e.emailChangeForm.$setPristine(),
  2376. n.emailChangeData = {}
  2377. }
  2378. var n = this;
  2379. n.user = t.user,
  2380. n.updateInProgress = !1,
  2381. n.update = function() {
  2382. e.emailChangeForm.$valid && (n.updateInProgress = !0,
  2383. r.changeEmail(n.emailChangeData).then(function() {
  2384. a(),
  2385. o.success("EMAIL_CHANGE_SUCCESS")
  2386. })["catch"](function(t) {
  2387. var r = t.data && t.data.error;
  2388. "registration_email" === r ? e.$broadcast("remote-data-invalid", "emailInvalid") : "changeEmail.email_already_in_use" === r ? e.$broadcast("remote-data-invalid", "emailUsedInChange") : "changeEmail.invalid_password" === r ? e.$broadcast("remote-data-invalid", "password") : 403 !== t.status && o.error("ERROR_SERVER")
  2389. })["finally"](function() {
  2390. n.updateInProgress = !1
  2391. }))
  2392. }
  2393. }
  2394. ],
  2395. controllerAs: "EmailChangeFormController",
  2396. templateUrl: "settings/email-change/email-change-form.html"
  2397. }),
  2398. angular.module("avatar.service", ["config", "google.analytics", "security"]).factory("avatar", ["$http", "$q", "CONFIG", "Session", "googleAnalytics", function(e, t, o, r, a) {
  2399. var n = {};
  2400. return n.query = function() {
  2401. return e.get(o.apiUrl + "/user/avatars").then(function(e) {
  2402. return e.data
  2403. })
  2404. }
  2405. ,
  2406. n.create = function(t) {
  2407. return e.post(o.apiUrl + "/user/avatars", {
  2408. name: t
  2409. }).then(function(e) {
  2410. return a.trackEvent("Avatar", "Created"),
  2411. r.update(e.data),
  2412. e.data
  2413. })
  2414. }
  2415. ,
  2416. n.isNameAvailable = function(r) {
  2417. return e.get(o.apiUrl + "/user/avatars/check-name?name=" + r).then(function(e) {
  2418. return e.data.isAvailable ? t.when() : t.reject()
  2419. })
  2420. }
  2421. ,
  2422. n.select = function(t) {
  2423. return e.post(o.apiUrl + "/user/avatars/select", t).then(function(e) {
  2424. return a.trackEvent("Avatar", "Changed"),
  2425. r.update(e.data),
  2426. e.data
  2427. })
  2428. }
  2429. ,
  2430. n
  2431. }
  2432. ]),
  2433. angular.module("avatar.selection", ["avatar.create", "avatar.search", "avatar.service", "locale", "router", "security", "templates"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  2434. e.statePrivate("settings.avatar", {
  2435. url: "/avatars",
  2436. parent: "settings",
  2437. controller: "AvatarSelectionController",
  2438. controllerAs: "AvatarSelectionController",
  2439. data: {
  2440. title: "HEAD_TITLE_AVATAR_SELECTION"
  2441. },
  2442. resolve: {
  2443. avatars: ["avatar", function(e) {
  2444. return e.query()
  2445. }
  2446. ]
  2447. },
  2448. templateUrl: "settings/avatar-selection/avatar-selection.html"
  2449. }),
  2450. t.when("/avatars", "/settings/avatars")
  2451. }
  2452. ]).controller("AvatarSelectionController", ["avatars", function(e) {
  2453. var t = this;
  2454. t.avatars = e
  2455. }
  2456. ]),
  2457. angular.module("trusted.locations.reset", ["account.security.service", "locale", "notifier", "templates"]).component("habboTrustedLocationsReset", {
  2458. controller: ["$translate", "$window", "accountSecurity", "notifier", function(e, t, o, r) {
  2459. function a() {
  2460. o.reset().then(function() {
  2461. r.success("ACCOUNT_SECURITY_TRUSTED_LOGINS_RESET_OK")
  2462. })["catch"](function(e) {
  2463. 403 !== e.status && r.error("ERROR_SERVER")
  2464. })["finally"](function() {
  2465. n.inProgress = !1
  2466. })
  2467. }
  2468. var n = this;
  2469. n.reset = function() {
  2470. n.inProgress = !0,
  2471. e("ACCOUNT_SECURITY_RESET_LOCATIONS_CONFIRMATION").then(function(e) {
  2472. t.confirm(e) ? a() : n.inProgress = !1
  2473. })
  2474. }
  2475. }
  2476. ],
  2477. controllerAs: "TrustedLocationsResetController",
  2478. templateUrl: "settings/account-security/trusted-locations-reset.html"
  2479. }),
  2480. angular.module("account.security.service", ["config", "google.analytics"]).factory("accountSecurity", ["$http", "CONFIG", "googleAnalytics", function(e, t, o) {
  2481. var r = {};
  2482. return r.status = function() {
  2483. return e.get(t.apiUrl + "/safetylock/featureStatus").then(function(e) {
  2484. return e.data
  2485. })
  2486. }
  2487. ,
  2488. r.save = function(r, a, n, i, s) {
  2489. return e.post(t.apiUrl + "/safetylock/save", {
  2490. questionId1: r,
  2491. answer1: a,
  2492. questionId2: n,
  2493. answer2: i,
  2494. password: s
  2495. }).then(function() {
  2496. o.trackEvent("Safety lock", "Questions saved")
  2497. })
  2498. }
  2499. ,
  2500. r.disable = function() {
  2501. return e.get(t.apiUrl + "/safetylock/disable").then(function() {
  2502. o.trackEvent("Safety lock", "Disabled")
  2503. })
  2504. }
  2505. ,
  2506. r.reset = function() {
  2507. return e.get(t.apiUrl + "/safetylock/resetTrustedLogins").then(function() {
  2508. o.trackEvent("Safety lock", "Trusted locations reset")
  2509. })
  2510. }
  2511. ,
  2512. r
  2513. }
  2514. ]),
  2515. angular.module("account.security", ["account.security.edit", "account.security.service", "locale", "router", "templates", "trusted.locations.reset"]).config(["$stateProvider", function(e) {
  2516. e.stateHabboAccountTrusted("settings.security", {
  2517. url: "/security",
  2518. controller: "AccountSecurityController",
  2519. controllerAs: "AccountSecurityController",
  2520. parent: "settings",
  2521. data: {
  2522. title: "HEAD_TITLE_ACCOUNT_SECURITY"
  2523. },
  2524. resolve: {
  2525. accountSecurityStatus: ["accountSecurity", function(e) {
  2526. return e.status()
  2527. }
  2528. ]
  2529. },
  2530. templateUrl: "settings/account-security/account-security.html"
  2531. })
  2532. }
  2533. ]).controller("AccountSecurityController", ["accountSecurityStatus", function(e) {
  2534. var t = this;
  2535. t.accountSecurityStatus = e
  2536. }
  2537. ]),
  2538. angular.module("account.security.edit", ["account.security.service", "locale", "message.container", "notifier", "safety.questions.modal", "templates"]).component("habboAccountSecurityEdit", {
  2539. bindings: {
  2540. accountSecurityStatus: "="
  2541. },
  2542. controller: ["$translate", "$window", "accountSecurity", "notifier", "safetyQuestionsModal", function(e, t, o, r, a) {
  2543. function n() {
  2544. o.disable().then(function() {
  2545. i.accountSecurityStatus = "disabled",
  2546. r.success("ACCOUNT_SECURITY_DISABLED_OK")
  2547. })["catch"](function(e) {
  2548. 403 !== e.status && r.error("ERROR_SERVER")
  2549. })["finally"](function() {
  2550. i.disableInProgress = !1
  2551. })
  2552. }
  2553. var i = this;
  2554. i.modal = a,
  2555. i.openModal = function() {
  2556. a.open().then(function() {
  2557. i.accountSecurityStatus = "enabled"
  2558. })
  2559. }
  2560. ,
  2561. i.disable = function() {
  2562. i.disableInProgress = !0,
  2563. e("ACCOUNT_SECURITY_DISABLE_CONFIRMATION").then(function(e) {
  2564. t.confirm(e) ? n() : i.disableInProgress = !1
  2565. })
  2566. }
  2567. }
  2568. ],
  2569. controllerAs: "AccountSecurityEditController",
  2570. templateUrl: "settings/account-security/account-security-edit.html"
  2571. }),
  2572. angular.module("security.require.session", ["security.session"]).directive("habboRequireSession", ["Session", "ngIfDirective", function(e, t) {
  2573. var o = t[0];
  2574. return {
  2575. restrict: "A",
  2576. priority: o.priority,
  2577. terminal: o.terminal,
  2578. transclude: o.transclude,
  2579. link: function(t, r, a) {
  2580. a.ngIf = function() {
  2581. return e.hasSession()
  2582. }
  2583. ,
  2584. o.link.apply(o, arguments)
  2585. }
  2586. }
  2587. }
  2588. ]).directive("habboRequireNoSession", ["Session", "ngIfDirective", function(e, t) {
  2589. var o = t[0];
  2590. return {
  2591. restrict: "A",
  2592. priority: o.priority,
  2593. terminal: o.terminal,
  2594. transclude: o.transclude,
  2595. link: function(t, r, a) {
  2596. a.ngIf = function() {
  2597. return !e.hasSession()
  2598. }
  2599. ,
  2600. o.link.apply(o, arguments)
  2601. }
  2602. }
  2603. }
  2604. ]),
  2605. angular.module("security.require.non.staff.account.session", ["security.session"]).directive("habboRequireNonStaffAccountSession", ["Session", "ngIfDirective", function(e, t) {
  2606. var o = t[0];
  2607. return {
  2608. restrict: "A",
  2609. priority: o.priority,
  2610. terminal: o.terminal,
  2611. transclude: o.transclude,
  2612. link: function(t, r, a) {
  2613. a.ngIf = function() {
  2614. return !e.isStaff()
  2615. }
  2616. ,
  2617. o.link.apply(o, arguments)
  2618. }
  2619. }
  2620. }
  2621. ]),
  2622. angular.module("security.require.habbo.account.session", ["security.session"]).directive("habboRequireHabboAccountSession", ["Session", "ngIfDirective", function(e, t) {
  2623. var o = t[0];
  2624. return {
  2625. restrict: "A",
  2626. priority: o.priority,
  2627. terminal: o.terminal,
  2628. transclude: o.transclude,
  2629. link: function(t, r, a) {
  2630. a.ngIf = function() {
  2631. return e.isHabboAccountSession()
  2632. }
  2633. ,
  2634. o.link.apply(o, arguments)
  2635. }
  2636. }
  2637. }
  2638. ]),
  2639. angular.module("security.session", ["security.require.habbo.account.session", "security.require.non.staff.account.session", "security.require.session", "security.session.service"]),
  2640. angular.module("security.session.store", []).factory("SessionStore", ["$window", function(e) {
  2641. var t = {};
  2642. return t.create = function(t) {
  2643. try {
  2644. e.sessionStorage.setItem("session", angular.toJson(t))
  2645. } catch (o) {
  2646. Bugsnag.notifyException(o, "SessionStorage not supported", {
  2647. groupingHash: "SessionStorage"
  2648. }, "info")
  2649. }
  2650. }
  2651. ,
  2652. t.get = function() {
  2653. try {
  2654. var t = e.sessionStorage.getItem("session");
  2655. return t ? angular.fromJson(t) : null
  2656. } catch (o) {
  2657. return Bugsnag.notifyException(o, "SessionStorage not supported", {
  2658. groupingHash: "SessionStorage"
  2659. }, "info"),
  2660. null
  2661. }
  2662. }
  2663. ,
  2664. t.destroy = function() {
  2665. try {
  2666. e.sessionStorage.removeItem("session")
  2667. } catch (t) {
  2668. Bugsnag.notifyException(t, "SessionStorage not supported", {
  2669. groupingHash: "SessionStorage"
  2670. }, "info")
  2671. }
  2672. }
  2673. ,
  2674. t
  2675. }
  2676. ]),
  2677. angular.module("security.session.service", ["config", "events", "security.bugsnag.session", "security.ga.session", "security.session.store"]).factory("Session", ["$rootScope", "BugsnagSession", "CONFIG", "EVENTS", "GaSession", "SessionStore", function(e, t, o, r, a, n) {
  2678. var i = {};
  2679. return i.user = null ,
  2680. i.init = function(e) {
  2681. return e = e || n.get(),
  2682. e ? i.create(e) : void 0
  2683. }
  2684. ,
  2685. i.create = function(o) {
  2686. return i.user = o,
  2687. t.create(i.user),
  2688. a.create(i.user),
  2689. n.create(i.user),
  2690. e.$broadcast(r.securityLogin),
  2691. i.user
  2692. }
  2693. ,
  2694. i.update = function(e) {
  2695. return angular.extend(i.user, e),
  2696. t.create(i.user),
  2697. a.create(i.user),
  2698. n.create(i.user),
  2699. i.user
  2700. }
  2701. ,
  2702. i.hasSession = function() {
  2703. return Boolean(i.user)
  2704. }
  2705. ,
  2706. i.isTrusted = function() {
  2707. return i.hasSession() && Boolean(i.user.trusted)
  2708. }
  2709. ,
  2710. i.isHabboAccountSession = function() {
  2711. return i.hasSession() && "fblogin" !== i.user.email && "rpxlogin" !== i.user.email
  2712. }
  2713. ,
  2714. i.hasAds = function() {
  2715. return !i.hasSession() || !(i.user.buildersClubMember || i.user.habboClubMember)
  2716. }
  2717. ,
  2718. i.hasPreRollAd = function() {
  2719. return i.hasSession() && !(i.user.buildersClubMember || i.user.habboClubMember) && !_.includes(i.user.traits, "NEW_USER") && !_.includes(i.user.traits, "STAFF") && !i.isTestUser()
  2720. }
  2721. ,
  2722. i.isTestUser = function() {
  2723. return "hhs1" === o.hotel && i.hasSession() && i.user.email && (_(i.user.email).includes("@dev.habbo.fi") || _(i.user.email).includes("@test.habbo.fi"))
  2724. }
  2725. ,
  2726. i.isCurrentUser = function(e) {
  2727. return i.hasSession() && i.user.uniqueId === e
  2728. }
  2729. ,
  2730. i.destroy = function() {
  2731. n.destroy()
  2732. }
  2733. ,
  2734. i.isStaff = function() {
  2735. return i.hasSession() && _.includes(i.user.traits, "STAFF")
  2736. }
  2737. ,
  2738. i
  2739. }
  2740. ]),
  2741. angular.module("security.ga.session", ["angular-md5"]).factory("GaSession", ["$window", "md5", function(e, t) {
  2742. var o = {};
  2743. return o.create = function(o) {
  2744. try {
  2745. e.ga("set", "userId", t.createHash(o.identityId.toString()))
  2746. } catch (r) {
  2747. Bugsnag.notifyException(r, "GA session not created", {}, "info")
  2748. }
  2749. }
  2750. ,
  2751. o
  2752. }
  2753. ]),
  2754. angular.module("security.bugsnag.session", ["angular-md5"]).factory("BugsnagSession", ["$window", "md5", function(e, t) {
  2755. var o = {};
  2756. return o.create = function(o) {
  2757. e.Bugsnag && (e.Bugsnag.user = {
  2758. id: t.createHash(o.identityId.toString())
  2759. })
  2760. }
  2761. ,
  2762. o
  2763. }
  2764. ]),
  2765. angular.module("security.safety.lock.service", ["config", "google.analytics", "security"]).factory("safetyLock", ["$http", "$location", "CONFIG", "Session", "googleAnalytics", function(e, t, o, r, a) {
  2766. var n = {};
  2767. return n.getQuestions = function() {
  2768. return e.get(o.apiUrl + "/safetylock/questions")
  2769. }
  2770. ,
  2771. n.unlock = function(n) {
  2772. return e.post(o.apiUrl + "/safetylock/unlock", n).then(function() {
  2773. var e = {
  2774. trusted: !0
  2775. };
  2776. return r.hasSession() && r.update(e),
  2777. a.trackEvent("Safety lock", "Unlocked", t.path()),
  2778. e
  2779. })
  2780. }
  2781. ,
  2782. n
  2783. }
  2784. ]),
  2785. angular.module("security.safety.lock", ["security.safety.lock.form", "security.safety.lock.service", "templates", "ui.bootstrap"]).controller("SafetyLockController", ["questions", function(e) {
  2786. var t = this;
  2787. t.questions = e.data
  2788. }
  2789. ]).factory("safetyLockModal", ["$uibModal", "safetyLock", function(e, t) {
  2790. var o, r = {};
  2791. return r.open = function() {
  2792. return o = e.open({
  2793. controller: "SafetyLockController",
  2794. controllerAs: "SafetyLockController",
  2795. resolve: {
  2796. questions: t.getQuestions
  2797. },
  2798. templateUrl: "security/safety-lock/safety-lock-modal.html"
  2799. }),
  2800. o.result
  2801. }
  2802. ,
  2803. r.isOpen = function() {
  2804. return Boolean(o) && o.open
  2805. }
  2806. ,
  2807. r
  2808. }
  2809. ]),
  2810. angular.module("security.safety.lock.form", ["form", "locale", "notifier", "security.safety.lock.service", "templates"]).directive("habboSafetyLockForm", ["notifier", "safetyLock", function(e, t) {
  2811. return {
  2812. restrict: "E",
  2813. scope: {
  2814. questions: "=",
  2815. onUnlock: "&",
  2816. onCancel: "&"
  2817. },
  2818. templateUrl: "security/safety-lock/safety-lock-form.html",
  2819. link: function(o) {
  2820. o.answers = {
  2821. trust: !1
  2822. },
  2823. o.unlockingInProgress = !1,
  2824. o.isTrustedLocationEnabled = !0,
  2825. o.unlock = function() {
  2826. o.safetyLockForm.$valid && (o.unlockingInProgress = !0,
  2827. t.unlock(o.answers).then(o.onUnlock)["catch"](function(t) {
  2828. var r = t.status;
  2829. 409 === r ? o.$broadcast("remote-data-invalid", "answer") : 429 === r ? e.error("ERROR_TOO_MANY_ATTEMPTS", {
  2830. time: moment(t.data.nextValidRequestDate).fromNow(!0)
  2831. }) : e.error("ERROR_SERVER")
  2832. })["finally"](function() {
  2833. o.unlockingInProgress = !1
  2834. }))
  2835. }
  2836. }
  2837. }
  2838. }
  2839. ]),
  2840. angular.module("security.safety.answering.modal", ["locale", "security.safety.answering.form", "templates", "ui.bootstrap"]).controller("SafetyAnsweringController", ["data", "questions", "targetAction", function(e, t, o) {
  2841. var r = this;
  2842. r.questions = t,
  2843. r.data = e,
  2844. r.targetAction = o
  2845. }
  2846. ]).factory("safetyAnsweringModal", ["$uibModal", function(e) {
  2847. var t = {};
  2848. return t.open = function(t, o, r) {
  2849. return e.open({
  2850. controller: "SafetyAnsweringController",
  2851. controllerAs: "SafetyAnsweringController",
  2852. resolve: {
  2853. questions: _.constant(t),
  2854. data: _.constant(o),
  2855. targetAction: _.constant(r)
  2856. },
  2857. templateUrl: "security/safety-lock/safety-answering-modal.html"
  2858. }).result
  2859. }
  2860. ,
  2861. t
  2862. }
  2863. ]),
  2864. angular.module("security.safety.answering.form", ["form", "locale", "notifier", "templates"]).directive("habboSafetyAnsweringForm", ["notifier", function(e) {
  2865. return {
  2866. restrict: "E",
  2867. scope: {
  2868. data: "=",
  2869. questions: "=",
  2870. targetAction: "&",
  2871. onSuccess: "&",
  2872. onCancel: "&"
  2873. },
  2874. templateUrl: "security/safety-lock/safety-lock-form.html",
  2875. link: function(t) {
  2876. t.answers = {},
  2877. t.unlockingInProgress = !1,
  2878. t.isTrustedLocationEnabled = !1,
  2879. t.unlock = function() {
  2880. t.safetyLockForm.$valid && (t.unlockingInProgress = !0,
  2881. _.assign(t.data, t.answers),
  2882. t.targetAction({
  2883. data: t.data
  2884. }).then(t.onSuccess)["catch"](function(o) {
  2885. var r = o.status;
  2886. 409 === r ? t.$broadcast("remote-data-invalid", "answer") : 429 === r ? e.error("ERROR_TOO_MANY_ATTEMPTS", {
  2887. time: moment(o.data.nextValidRequestDate).fromNow(!0)
  2888. }) : e.error("ERROR_SERVER")
  2889. })["finally"](function() {
  2890. t.unlockingInProgress = !1
  2891. }))
  2892. }
  2893. }
  2894. }
  2895. }
  2896. ]),
  2897. angular.module("security.rpx.service", ["config"]).factory("rpxSecurity", ["$document", "$window", "CONFIG", function(e, t, o) {
  2898. var r, a = {};
  2899. return a.init = function() {
  2900. t.janrain = {},
  2901. t.janrain.settings = {},
  2902. t.janrain.settings.language = o.rpxLocale,
  2903. t.janrain.settings.tokenUrl = o.rpxTokenUrl,
  2904. t.janrain.ready = !0,
  2905. r = e[0].createElement("script"),
  2906. r.id = "janrainAuthWidget",
  2907. r.src = "https://rpxnow.com/js/lib/login.habbo.com/engage.js",
  2908. e[0].body.appendChild(r)
  2909. }
  2910. ,
  2911. a.destroy = function() {
  2912. r && (delete t.janrain,
  2913. angular.element(r).remove(),
  2914. angular.element('script[src^="https://d29usylhdk1xyu.cloudfront.net"]').remove(),
  2915. angular.element("#janrainModal, #janrainModalOverlay").remove())
  2916. }
  2917. ,
  2918. a
  2919. }
  2920. ]),
  2921. angular.module("security.rpx.message", ["notifier"]).factory("rpxMessage", ["notifier", function(e) {
  2922. var t = {}
  2923. , o = "💩"
  2924. , r = "🐳"
  2925. , a = "🙊";
  2926. return t.show = function(t) {
  2927. switch (t) {
  2928. case o:
  2929. e.error("LOGIN_RPX_REGISTRATION_DISABLED");
  2930. break;
  2931. case r:
  2932. e.error("ERROR_SERVER_MAINTENANCE");
  2933. break;
  2934. case a:
  2935. e.error("ERROR_SERVER")
  2936. }
  2937. }
  2938. ,
  2939. t
  2940. }
  2941. ]).run(["$location", "rpxMessage", function(e, t) {
  2942. t.show(e.search().error)
  2943. }
  2944. ]),
  2945. angular.module("security.rpx", ["security.rpx.message", "security.rpx.service"]),
  2946. angular.module("security.login.shake", []).constant("LOGIN_EVENTS", {
  2947. invalidCredentials: "login-invalid-credentials"
  2948. }).directive("habboShake", ["LOGIN_EVENTS", function(e) {
  2949. return {
  2950. restrict: "A",
  2951. link: function(t, o) {
  2952. t.$on(e.invalidCredentials, function() {
  2953. var e = angular.element(".modal-dialog")
  2954. , t = e.is(":visible") ? e : o;
  2955. t.addClass("animated shake").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function() {
  2956. t.removeClass("animated shake")
  2957. })
  2958. })
  2959. }
  2960. }
  2961. }
  2962. ]),
  2963. angular.module("security.login", ["security.login.form", "templates", "ui.bootstrap"]).factory("loginModal", ["$uibModal", function(e) {
  2964. var t, o = {};
  2965. return o.open = function() {
  2966. return t = e.open({
  2967. templateUrl: "security/login/login-modal.html"
  2968. }),
  2969. t.result
  2970. }
  2971. ,
  2972. o.isOpen = function() {
  2973. return Boolean(t) && t.open
  2974. }
  2975. ,
  2976. o
  2977. }
  2978. ]),
  2979. angular.module("security.login.form", ["air.download.link", "captcha.modal", "claim.password", "form", "locale", "notifier", "recover.password.modal", "security.facebook.connect", "security.login.rpx", "security.login.shake", "security.service", "templates"]).component("habboLoginForm", {
  2980. bindings: {
  2981. onLogin: "&"
  2982. },
  2983. controller: ["$element", "$location", "$scope", "$window", "LOGIN_EVENTS", "captchaModal", "notifier", "recoverPasswordModal", "security", function(e, t, o, r, a, n, i, s, l) {
  2984. function c() {
  2985. n.open().then(function(e) {
  2986. u({
  2987. email: p.email,
  2988. password: p.password,
  2989. captchaToken: e
  2990. })
  2991. })
  2992. }
  2993. function u(e) {
  2994. p.loginInProgress = !0,
  2995. l.login(e).then(p.onLogin)["catch"](d)["finally"](function() {
  2996. p.loginInProgress = !1
  2997. })
  2998. }
  2999. function d(e) {
  3000. var t = e.status
  3001. , o = e.data && e.data.message;
  3002. h = Boolean(e.data && e.data.captcha),
  3003. 401 === t ? "login.staff_login_not_allowed" === o ? i.error("ERROR_LOGIN_STAFF_NOT_ALLOWED") : "invalid-captcha" === o ? c() : m() : 429 === t ? i.error("ERROR_TOO_MANY_ATTEMPTS", {
  3004. time: moment(e.data.nextValidRequestDate).fromNow(!0)
  3005. }) : "force.pending" !== t && i.error("ERROR_SERVER")
  3006. }
  3007. function m() {
  3008. b++,
  3009. b === f ? (f *= 2,
  3010. s.open(p.email)) : (o.$broadcast(a.invalidCredentials),
  3011. o.$broadcast("remote-data-invalid", "credentials"))
  3012. }
  3013. var p = this
  3014. , h = !1
  3015. , b = 0
  3016. , f = 3;
  3017. p.loginInProgress = !1,
  3018. p.login = function() {
  3019. var o = t.search().captchaToken || r.captchaToken;
  3020. p.email = e.find("[type=email]").val(),
  3021. p.password = e.find("[type=password]").val(),
  3022. o ? u({
  3023. email: p.email,
  3024. password: p.password,
  3025. captchaToken: o
  3026. }) : h ? c() : u({
  3027. email: p.email,
  3028. password: p.password
  3029. })
  3030. }
  3031. }
  3032. ],
  3033. controllerAs: "LoginController",
  3034. templateUrl: "security/login/login-form.html"
  3035. }),
  3036. angular.module("security.use.force.service", ["security.force.email.modal", "security.force.password.modal", "security.force.service", "security.force.tos.modal", "security.safety.lock"]).factory("useForce", ["$q", "FORCE", "forceEmailModal", "forcePasswordModal", "forceTOSModal", "safetyLockModal", function(e, t, o, r, a, n) {
  3037. function i(e, t) {
  3038. return function(o) {
  3039. var r = o && o.force;
  3040. return _.includes(r, e) ? t(o) : o
  3041. }
  3042. }
  3043. function s(e) {
  3044. return l(e).then(r.open)
  3045. }
  3046. function l(t) {
  3047. return t.trusted ? e.when(t) : n.open().then(function(e) {
  3048. return _.assign(t, e)
  3049. })
  3050. }
  3051. var c = {};
  3052. return c.handleForces = function(r) {
  3053. return e.when(r).then(i(t.email, o.open)).then(i(t.password, s)).then(i(t.TOS, a.open))
  3054. }
  3055. ,
  3056. c
  3057. }
  3058. ]),
  3059. angular.module("security.force.service", ["config", "google.analytics"]).constant("FORCE", {
  3060. email: "EMAIL",
  3061. password: "PASSWORD",
  3062. TOS: "TOS"
  3063. }).factory("force", ["$http", "CONFIG", "googleAnalytics", function(e, t, o) {
  3064. var r = {};
  3065. return r.changeEmail = function(r) {
  3066. return e.post(t.apiUrl + "/force/email-change", {
  3067. newEmail: r
  3068. }).then(function(e) {
  3069. return o.trackEvent("Email", "Forced change"),
  3070. e.data
  3071. })
  3072. }
  3073. ,
  3074. r.changePassword = function(r) {
  3075. return e.post(t.apiUrl + "/force/password-change", {
  3076. newPassword: r
  3077. }).then(function(e) {
  3078. return o.trackEvent("Password", "Forced change"),
  3079. e.data
  3080. })
  3081. }
  3082. ,
  3083. r.acceptTOS = function() {
  3084. return e.post(t.apiUrl + "/force/tos-accept").then(function(e) {
  3085. return o.trackEvent("TOS", "Forced accept"),
  3086. e.data
  3087. })
  3088. }
  3089. ,
  3090. r
  3091. }
  3092. ]),
  3093. angular.module("security.fingerprint", ["security.fingerprint.interceptor", "security.fingerprint.service.init"]),
  3094. angular.module("security.fingerprint.service", []).factory("fingerprint", function() {
  3095. var e = {};
  3096. return e.getFingerprint = function() {
  3097. return e.fingerprint
  3098. }
  3099. ,
  3100. e.calculateFingerprint = function() {
  3101. (new Fingerprint2).get(function(t) {
  3102. e.fingerprint = t
  3103. })
  3104. }
  3105. ,
  3106. e
  3107. }),
  3108. angular.module("security.fingerprint.service.init", ["security.fingerprint.service"]).run(["fingerprint", function(e) {
  3109. e.calculateFingerprint()
  3110. }
  3111. ]),
  3112. angular.module("security.fingerprint.service.mock", []).factory("fingerprint", function() {
  3113. var e = {};
  3114. return e.getFingerprint = function() {
  3115. return e.fingerprint
  3116. }
  3117. ,
  3118. e.calculateFingerprint = _.noop,
  3119. e
  3120. }),
  3121. angular.module("security.fingerprint.interceptor", ["config", "security.fingerprint.service"]).factory("fingerprintInterceptor", ["CONFIG", "fingerprint", function(e, t) {
  3122. var o = {};
  3123. return o.request = function(o) {
  3124. return t.getFingerprint() && _(o.url).includes(e.apiUrl) && (o.headers["x-habbo-fingerprint"] = t.getFingerprint()),
  3125. o
  3126. }
  3127. ,
  3128. o
  3129. }
  3130. ]).config(["$httpProvider", function(e) {
  3131. e.interceptors.push("fingerprintInterceptor")
  3132. }
  3133. ]),
  3134. angular.module("spinner", ["security", "templates", "ui.bootstrap", "ui.router"]).factory("spinner", ["$rootScope", "$timeout", "$uibModal", "loginModal", "safetyLockModal", function(e, t, o, r, a) {
  3135. function n() {
  3136. t.cancel(c),
  3137. l || (c = t(s, 200))
  3138. }
  3139. function i() {
  3140. t.cancel(c),
  3141. l && (l.close(),
  3142. l = null ,
  3143. u = !0)
  3144. }
  3145. function s() {
  3146. r.isOpen() || a.isOpen() || (l = o.open({
  3147. animation: !1,
  3148. backdrop: "static",
  3149. backdropClass: u ? "spinner-backdrop--transparent" : "spinner-backdrop--solid",
  3150. keyboard: !1,
  3151. templateUrl: "router/spinner/spinner.html",
  3152. windowClass: u ? "spinner spinner--transparent" : "spinner spinner--solid"
  3153. }))
  3154. }
  3155. var l, c, u = !1, d = {};
  3156. return d.init = function() {
  3157. s(),
  3158. e.$on("$stateChangeStart", n),
  3159. e.$on("$stateChangeSuccess", i),
  3160. e.$on("$stateChangeError", i)
  3161. }
  3162. ,
  3163. d
  3164. }
  3165. ]),
  3166. angular.module("scrolltop", ["ui.router"]).factory("scrolltop", function() {
  3167. var e = {};
  3168. return e.enabled = !0,
  3169. e.setEnabled = function(e) {
  3170. this.enabled = e
  3171. }
  3172. ,
  3173. e.isEnabled = function() {
  3174. return this.enabled
  3175. }
  3176. ,
  3177. e
  3178. }).run(["$rootScope", "$window", "scrolltop", function(e, t, o) {
  3179. e.$on("$viewContentLoaded", function() {
  3180. o.isEnabled() && t.scrollTo(0, 0)
  3181. })
  3182. }
  3183. ]),
  3184. angular.module("prerender.status.code", []).directive("prerenderStatusCode", ["$location", function(e) {
  3185. return {
  3186. restrict: "A",
  3187. link: function(t, o, r) {
  3188. var a = e.absUrl();
  3189. t.$on("$stateChangeStart", function(e, t) {
  3190. t.resolve && t.resolve.auth && r.$set("content", 401)
  3191. }),
  3192. t.$on("$stateChangeSuccess", function(t, o) {
  3193. "notFound" === o.name ? r.$set("content", 404) : r.$set("content", a === e.absUrl() ? 200 : 301)
  3194. }),
  3195. t.$on("$stateChangeError", function() {
  3196. r.$set("content", 404)
  3197. })
  3198. }
  3199. }
  3200. }
  3201. ]),
  3202. angular.module("prerender.ready", []).run(["$browser", "$timeout", "$window", function(e, t, o) {
  3203. e.notifyWhenNoOutstandingRequests(function() {
  3204. t(function() {
  3205. o.prerenderReady = !0
  3206. })
  3207. })
  3208. }
  3209. ]),
  3210. angular.module("prerender.header", []).directive("prerenderHeader", ["$location", function(e) {
  3211. return {
  3212. restrict: "A",
  3213. link: function(t, o, r) {
  3214. var a = e.absUrl();
  3215. t.$on("$stateChangeSuccess", function(t, o) {
  3216. var n = e.absUrl();
  3217. "notFound" !== o.name && a !== n && r.$set("content", "Location: " + n)
  3218. })
  3219. }
  3220. }
  3221. }
  3222. ]),
  3223. angular.module("prerender", ["prerender.header", "prerender.ready", "prerender.status.code"]),
  3224. angular.module("head.title", ["head.service"]).directive("title", ["Head", function(e) {
  3225. return {
  3226. restrict: "E",
  3227. link: function(t, o) {
  3228. function r(e) {
  3229. o.html(e)
  3230. }
  3231. t.$watch(e.getFullTitle, r)
  3232. }
  3233. }
  3234. }
  3235. ]),
  3236. angular.module("head", ["head.content", "head.service", "head.title", "head.url"]),
  3237. angular.module("head.url", []).directive("habboHeadUrl", ["$location", function(e) {
  3238. return {
  3239. restrict: "A",
  3240. link: function(t, o, r) {
  3241. function a() {
  3242. return e.absUrl()
  3243. }
  3244. function n(e) {
  3245. r.$set(r.habboHeadUrl, e)
  3246. }
  3247. t.$watch(a, n)
  3248. }
  3249. }
  3250. }
  3251. ]),
  3252. angular.module("head.content", ["head.service"]).constant("META_ATTRS", {
  3253. "og:title": "title",
  3254. "og:description": "description",
  3255. "og:image": "image",
  3256. "og:image:height": "imageHeight",
  3257. "og:image:width": "imageWidth",
  3258. "twitter:title": "title",
  3259. "twitter:description": "description",
  3260. "twitter:card": "twitter:card",
  3261. "twitter:image": "image",
  3262. name: "title",
  3263. description: "description",
  3264. image: "image"
  3265. }).directive("content", ["Head", "META_ATTRS", function(e, t) {
  3266. return {
  3267. restrict: "A",
  3268. link: function(o, r, a) {
  3269. function n() {
  3270. return e[s]
  3271. }
  3272. function i(e) {
  3273. a.$set("content", e)
  3274. }
  3275. var s = t[a.name || a.property || a.itemprop];
  3276. s && o.$watch(n, i)
  3277. }
  3278. }
  3279. }
  3280. ]),
  3281. angular.module("head.service", ["locale", "ui.router"]).constant("HEAD_DEFAULTS", {
  3282. title: "Habbo",
  3283. description: "Registreer je GRATIS in 's werelds grootste virtuele hotel! Ontmoet en maak vrienden, chat met anderen, maak je eigen avatar, ontwerp je eigen kamer en nog veel meer ...",
  3284. image: "https://habboo-a.akamaihd.net/habbo-web/america/nl/assets/images/app_summary_image-1200x628.85a9f5dc.png",
  3285. imageHeight: 628,
  3286. imageWidth: 1200,
  3287. "twitter:card": "summary_large_image"
  3288. }).factory("Head", ["$translate", "HEAD_DEFAULTS", function(e, t) {
  3289. var o = {}
  3290. , r = " - Habbo";
  3291. return o.setDefaults = function() {
  3292. o.title = t.title,
  3293. o.title = t.title,
  3294. o.description = t.description,
  3295. o.image = t.image,
  3296. o.imageHeight = t.imageHeight,
  3297. o.imageWidth = t.imageWidth,
  3298. o["twitter:card"] = t["twitter:card"]
  3299. }
  3300. ,
  3301. o.set = function(e, t) {
  3302. var r = e || {};
  3303. r.title && o.setTitle(r.title, t),
  3304. r.description && (o.description = r.description),
  3305. r.image && (o.image = r.image),
  3306. r.imageHeight && (o.imageHeight = r.imageHeight),
  3307. r.imageWidth && (o.imageWidth = r.imageWidth),
  3308. r["twitter:card"] && (o["twitter:card"] = r["twitter:card"])
  3309. }
  3310. ,
  3311. o.setTitle = function(t, r) {
  3312. e(t, r).then(function(e) {
  3313. o.title = e
  3314. })
  3315. }
  3316. ,
  3317. o.getFullTitle = function() {
  3318. return "Habbo" === o.title ? o.title : o.title + r
  3319. }
  3320. ,
  3321. o
  3322. }
  3323. ]).run(["$rootScope", "Head", function(e, t) {
  3324. e.$on("$stateChangeStart", function() {
  3325. t.setDefaults()
  3326. }),
  3327. e.$on("$stateChangeSuccess", function(e, o, r) {
  3328. t.set(o.data, r)
  3329. })
  3330. }
  3331. ]),
  3332. angular.module("ban.error", ["ban.message", "ban.redirect"]),
  3333. angular.module("ban.redirect", ["locale", "security"]).factory("banRedirect", ["$injector", "$q", function(e, t) {
  3334. function o(e) {
  3335. var t = e.status
  3336. , o = e.data && e.data.message;
  3337. return (403 === t || 401 === t) && r(o)
  3338. }
  3339. function r(e) {
  3340. return _.includes(i, e)
  3341. }
  3342. function a(t) {
  3343. var o = t.data;
  3344. return n = n || e.get("security"),
  3345. n.forceLogout("/?error=banned&" + $.param(o))
  3346. }
  3347. var n, i = ["login.user_banned", "login.identity_banned", "login.avatar_banned", "user.identity_banned", "user.avatar_banned"], s = {};
  3348. return s.responseError = function(e) {
  3349. return o(e) ? a(e) : t.reject(e)
  3350. }
  3351. ,
  3352. s
  3353. }
  3354. ]).config(["$httpProvider", function(e) {
  3355. e.interceptors.push("banRedirect")
  3356. }
  3357. ]),
  3358. angular.module("ban.message", ["locale", "notifier"]).factory("banMessage", ["$q", "$translate", "dateFilter", "notifier", function(e, t, o, r) {
  3359. function a(e, t, o) {
  3360. var r = _(e).includes("avatar_banned") ? "USER_AVATAR" : "USER_IDENTITY";
  3361. return r += t ? "_PERMANENT_BAN_TEXT" : "_BAN_TEXT",
  3362. o && (r += "_WITH_GUIDE"),
  3363. r
  3364. }
  3365. var n = {};
  3366. return n.show = function(n) {
  3367. if ("banned" === n.error) {
  3368. var i = n.sanctionReasonId ? "CFH_REASON_" + n.sanctionReasonId.toUpperCase() : "CFH_REASON_AUTO_TRIGGER"
  3369. , s = "true" === n.permanentBan ? "CFH_REASON_RESOLVED_TARGET_BAN_PERMANENT" : "CFH_REASON_RESOLVED_TARGET_BAN"
  3370. , l = "MODERATOR_MSG_POSTFIX";
  3371. return e.all([t(s), t(i), t(l)]).then(function(e) {
  3372. var t = e[0]
  3373. , i = e[1]
  3374. , s = e[2]
  3375. , l = -1 === t.indexOf("%") ? t : t.substring(0, t.indexOf("%"))
  3376. , c = n.reason;
  3377. _.endsWith(n.reason, s) && -1 !== n.reason.indexOf(i) && _.startsWith(n.reason, l) || (c = i);
  3378. var u = n.expiryTime
  3379. , d = {
  3380. message: n.message,
  3381. avatarName: n.avatarName,
  3382. reason: c,
  3383. expiryTime: u ? o(u, "short") : u,
  3384. permanentBan: "true" === n.permanentBan,
  3385. provideExtraSupport: "true" === n.provideExtraSupport
  3386. }
  3387. , m = a(d.message, d.permanentBan, d.provideExtraSupport);
  3388. r.errorSticky("USER_BAN_TITLE", m, d)
  3389. })
  3390. }
  3391. }
  3392. ,
  3393. n
  3394. }
  3395. ]).run(["$location", "banMessage", function(e, t) {
  3396. t.show(e.search())
  3397. }
  3398. ]),
  3399. angular.module("room.restricted", ["locale", "templates"]).component("habboRoomRestricted", {
  3400. bindings: {
  3401. room: "<"
  3402. },
  3403. controllerAs: "RoomRestrictedController",
  3404. templateUrl: "room/room-restricted/room-restricted.html"
  3405. }),
  3406. angular.module("room.picture", ["templates"]).component("habboRoomPicture", {
  3407. bindings: {
  3408. url: "@"
  3409. },
  3410. templateUrl: "room/room-picture/room-picture.html",
  3411. controllerAs: "RoomPictureController"
  3412. }),
  3413. angular.module("room.open", ["avatar", "locale", "official.room.avatar", "room.info", "room.picture", "templates"]).component("habboRoomOpen", {
  3414. bindings: {
  3415. room: "<"
  3416. },
  3417. controllerAs: "RoomOpenController",
  3418. templateUrl: "room/room-open/room-open.html",
  3419. controller: ["$window", function(e) {
  3420. var t = this
  3421. , o = e.btoa(t.room.name.replace(/[^\x00-\x7F]/g, "").trim());
  3422. t.room.hotelReportLink = "/hotel?link=navigator/report/" + t.room.uniqueId + "/" + o
  3423. }
  3424. ]
  3425. }),
  3426. angular.module("room.info", ["templates"]).component("habboRoomInfo", {
  3427. bindings: {
  3428. description: "@",
  3429. tags: "<"
  3430. },
  3431. templateUrl: "room/room-info/room-info.html",
  3432. controllerAs: "RoomInfoController"
  3433. }),
  3434. angular.module("registration.policies", ["locale", "templates"]).component("habboPolicies", {
  3435. require: {
  3436. FormController: "^form"
  3437. },
  3438. bindings: {
  3439. policies: "="
  3440. },
  3441. controllerAs: "PoliciesController",
  3442. templateUrl: "registration/policies/policies.html"
  3443. }),
  3444. angular.module("registration.partner", ["locale", "templates"]).component("habboPartnerRegistration", {
  3445. bindings: {
  3446. value: "="
  3447. },
  3448. controller: function() {
  3449. var e = this;
  3450. e.value = !0
  3451. },
  3452. controllerAs: "PartnerRegistrationController",
  3453. templateUrl: "registration/partner-registration/partner-registration.html"
  3454. }),
  3455. angular.module("birthdate.filters", []).filter("daysInMonth", function() {
  3456. var e = [4, 6, 9, 11];
  3457. return function(t, o, r) {
  3458. return o = parseInt(o, 10),
  3459. r = parseInt(r, 10),
  3460. 2 === o ? moment([r]).isLeapYear() ? _(t).take(29).value() : _(t).take(28).value() : _(e).includes(o) ? _(t).take(30).value() : t
  3461. }
  3462. }),
  3463. angular.module("birthdate", ["ngMessages", "birthdate.filters", "locale", "templates"]).component("habboBirthdate", {
  3464. require: {
  3465. FormController: "^form"
  3466. },
  3467. bindings: {
  3468. birthdate: "="
  3469. },
  3470. controller: ["$scope", "daysInMonthFilter", function(e, t) {
  3471. var o = 7
  3472. , r = 1900
  3473. , a = (new Date).getFullYear() - o
  3474. , n = this;
  3475. n.days = _.range(1, 32),
  3476. n.months = [{
  3477. value: 1,
  3478. translationKey: "MONTH_JANUARY"
  3479. }, {
  3480. value: 2,
  3481. translationKey: "MONTH_FEBRUARY"
  3482. }, {
  3483. value: 3,
  3484. translationKey: "MONTH_MARCH"
  3485. }, {
  3486. value: 4,
  3487. translationKey: "MONTH_APRIL"
  3488. }, {
  3489. value: 5,
  3490. translationKey: "MONTH_MAY"
  3491. }, {
  3492. value: 6,
  3493. translationKey: "MONTH_JUNE"
  3494. }, {
  3495. value: 7,
  3496. translationKey: "MONTH_JULY"
  3497. }, {
  3498. value: 8,
  3499. translationKey: "MONTH_AUGUST"
  3500. }, {
  3501. value: 9,
  3502. translationKey: "MONTH_SEPTEMBER"
  3503. }, {
  3504. value: 10,
  3505. translationKey: "MONTH_OCTOBER"
  3506. }, {
  3507. value: 11,
  3508. translationKey: "MONTH_NOVEMBER"
  3509. }, {
  3510. value: 12,
  3511. translationKey: "MONTH_DECEMBER"
  3512. }],
  3513. n.years = _.range(r, a).reverse(),
  3514. e.$watchGroup(["BirthdateController.month", "BirthdateController.year"], function(e) {
  3515. var o = parseInt(n.day, 10)
  3516. , r = e[0]
  3517. , a = e[1];
  3518. _(t(n.days, r, a)).includes(o) || (n.day = "")
  3519. }),
  3520. e.$watchGroup(["BirthdateController.day", "BirthdateController.month", "BirthdateController.year"], function(e) {
  3521. var t = parseInt(e[0], 10)
  3522. , o = parseInt(e[1], 10)
  3523. , r = parseInt(e[2], 10);
  3524. _.isNaN(t) || _.isNaN(o) || _.isNaN(r) ? n.FormController.birthdate.$pristine || n.FormController.birthdate.$setViewValue(null ) : n.FormController.birthdate.$setViewValue({
  3525. day: t,
  3526. month: o,
  3527. year: r
  3528. })
  3529. })
  3530. }
  3531. ],
  3532. controllerAs: "BirthdateController",
  3533. templateUrl: "registration/birthdate/birthdate.html"
  3534. }),
  3535. angular.module("profile.modal", ["by.name.description.or.motto.filter", "empty.results", "form", "locale", "profile.item.lists", "templates", "ui.bootstrap"]).controller("ProfileModalController", ["items", "type", function(e, t) {
  3536. var o = this;
  3537. o.items = e,
  3538. o.type = t
  3539. }
  3540. ]).component("habboProfileModal", {
  3541. bindings: {
  3542. items: "<",
  3543. type: "@"
  3544. },
  3545. controller: ["$uibModal", function(e) {
  3546. var t = this;
  3547. t.openModal = function() {
  3548. e.open({
  3549. transclude: !0,
  3550. templateUrl: "profile/profile-modal/profile-modal.html",
  3551. controller: "ProfileModalController",
  3552. controllerAs: "ProfileModalController",
  3553. resolve: {
  3554. items: _.constant(t.items),
  3555. type: _.constant(t.type)
  3556. }
  3557. })
  3558. }
  3559. }
  3560. ],
  3561. controllerAs: "ProfileModalComponentController",
  3562. template: '<a ng-click="ProfileModalComponentController.openModal()" class="profile-modal__link" translate="SEE_ALL"></a>'
  3563. }),
  3564. angular.module("profile.header", ["encode.uri.component", "imager", "templates"]).component("habboProfileHeader", {
  3565. bindings: {
  3566. figure: "@",
  3567. user: "@",
  3568. motto: "@",
  3569. profile: "@"
  3570. },
  3571. controller: function() {
  3572. var e = this;
  3573. e.isCroco = function(e) {
  3574. return Boolean(e) && "crikey" === e.toLowerCase()
  3575. }
  3576. },
  3577. controllerAs: "ProfileHeaderController",
  3578. templateUrl: "profile/profile-header/profile-header.html",
  3579. transclude: !0
  3580. }),
  3581. angular.module("profile.item.lists", ["badge", "by.name.description.or.motto.filter", "encode.uri.component", "flash", "group.badge", "imager", "infinite-scroll", "room.icon", "templates"]).component("habboBadgeList", {
  3582. bindings: {
  3583. badges: "<",
  3584. query: "<"
  3585. },
  3586. controllerAs: "BadgeListController",
  3587. templateUrl: "profile/item-lists/badges.html"
  3588. }).component("habboFriendList", {
  3589. bindings: {
  3590. friends: "<",
  3591. query: "<"
  3592. },
  3593. controllerAs: "FriendListController",
  3594. templateUrl: "profile/item-lists/friends.html"
  3595. }).component("habboRoomList", {
  3596. bindings: {
  3597. rooms: "<",
  3598. query: "<"
  3599. },
  3600. controllerAs: "RoomListController",
  3601. templateUrl: "profile/item-lists/rooms.html"
  3602. }).component("habboGroupList", {
  3603. bindings: {
  3604. groups: "<",
  3605. query: "<"
  3606. },
  3607. controllerAs: "GroupListController",
  3608. templateUrl: "profile/item-lists/groups.html"
  3609. }),
  3610. angular.module("creation", ["creation.content", "creation.service", "header", "locale", "profile.header", "router", "social.share", "templates"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  3611. var o = ["$q", "$stateParams", "creations", function(e, t, o) {
  3612. var r = _.findIndex(o, {
  3613. id: t.creationId
  3614. });
  3615. return r >= 0 ? r : e.reject()
  3616. }
  3617. ];
  3618. e.statePublic("photo", {
  3619. url: "/profile/:name/photo/:creationId?pool",
  3620. controller: "CreationController",
  3621. controllerAs: "CreationController",
  3622. onEnter: ["creations", "index", "Head", function(e, t, o) {
  3623. o.setTitle("HEAD_TITLE_PHOTO", {
  3624. name: e[t].creator_name
  3625. }),
  3626. o.image = e[t].url,
  3627. o.imageHeight = e[t].contentHeight,
  3628. o.imageWidth = e[t].contentWidth
  3629. }
  3630. ],
  3631. resolve: {
  3632. creations: ["$stateParams", "Creations", function(e, t) {
  3633. return t.photos({
  3634. pool: e.pool,
  3635. name: e.name
  3636. })
  3637. }
  3638. ],
  3639. index: o
  3640. },
  3641. templateUrl: "profile/creation/creation.html"
  3642. }),
  3643. e.statePublic("story", {
  3644. url: "/profile/:name/story/:creationId?pool",
  3645. controller: "CreationController",
  3646. controllerAs: "CreationController",
  3647. onEnter: ["creations", "index", "Head", function(e, t, o) {
  3648. var r = e[t];
  3649. "SELFIE" === r.type ? o.setTitle("HEAD_TITLE_SELFIE", {
  3650. name: r.creator_name
  3651. }) : o.setTitle("HEAD_TITLE_CREATION", {
  3652. creation: r.title,
  3653. name: r.creator_name
  3654. }),
  3655. o.image = r.url,
  3656. o.imageHeight = r.contentHeight,
  3657. o.imageWidth = r.contentWidth
  3658. }
  3659. ],
  3660. resolve: {
  3661. creations: ["$stateParams", "Creations", function(e, t) {
  3662. return t.stories({
  3663. pool: e.pool,
  3664. name: e.name
  3665. })
  3666. }
  3667. ],
  3668. index: o
  3669. },
  3670. templateUrl: "profile/creation/creation.html"
  3671. }),
  3672. t.when("/profile/:name/creation/:id", "/profile/:name/story/:id")
  3673. }
  3674. ]).controller("CreationController", ["$scope", "creations", "index", "scrolltop", function(e, t, o, r) {
  3675. var a = this;
  3676. a.creation = t[o],
  3677. a.next = t[o + 1],
  3678. a.previous = t[o - 1],
  3679. e.$on("$stateChangeStart", function(e, t) {
  3680. "photo" === t.name || "story" === t.name ? r.setEnabled(!1) : r.setEnabled(!0)
  3681. })
  3682. }
  3683. ]),
  3684. angular.module("creation.content", ["creation.href", "like", "locale", "navigate.to.on.key", "photo.delete", "report", "security", "templates"]).component("habboCreationContent", {
  3685. bindings: {
  3686. creation: "<",
  3687. previous: "<",
  3688. next: "<"
  3689. },
  3690. controller: ["Session", function(e) {
  3691. var t = this;
  3692. t.isDeletable = function() {
  3693. return e.isCurrentUser(t.creation.creator_uniqueId)
  3694. }
  3695. }
  3696. ],
  3697. controllerAs: "CreationContentController",
  3698. templateUrl: "profile/creation/creation-content.html"
  3699. }),
  3700. angular.module("creation.service", ["photos.service", "profile.creations"]).factory("Creations", ["CreationsProfile", "Photos", function(e, t) {
  3701. var o = {};
  3702. return o.photos = function(o) {
  3703. return "photos" === o.pool ? t.query().$promise : e.photosForUser(o.name)
  3704. }
  3705. ,
  3706. o.stories = function(t) {
  3707. return e.storiesForUser(t.name)
  3708. }
  3709. ,
  3710. o
  3711. }
  3712. ]),
  3713. angular.module("client.messenger", []).factory("clientMessenger", function() {
  3714. function e(e) {
  3715. a.postMessage({
  3716. call: "open-link",
  3717. target: e.link
  3718. }, "*")
  3719. }
  3720. function t(e) {
  3721. a.postMessage({
  3722. call: "open-room",
  3723. target: e.room
  3724. }, "*")
  3725. }
  3726. function o(e) {
  3727. a.postMessage({
  3728. call: "interstitial-status",
  3729. target: e.interstitial
  3730. }, "*")
  3731. }
  3732. var r = {}
  3733. , a = null
  3734. , n = {
  3735. link: e,
  3736. room: t,
  3737. interstitial: o
  3738. };
  3739. return r.init = function(e) {
  3740. a = e
  3741. }
  3742. ,
  3743. r.handle = function(e) {
  3744. var t = _(e).pickBy(_.isString).keys().head()
  3745. , o = n[t];
  3746. o && o(e)
  3747. }
  3748. ,
  3749. r
  3750. }),
  3751. angular.module("client.listener", ["client.heartbeat.ping.service", "interstitial", "notifier", "security"]).factory("clientListener", ["$location", "$rootScope", "EVENTS", "Session", "clientHeartbeatPing", "interstitial", "notifier", "security", function(e, t, o, r, a, n, i, s) {
  3752. function l() {
  3753. C = !0
  3754. }
  3755. function c() {
  3756. y = moment(),
  3757. (null === E || moment().diff(E, "seconds") > _) && (E = moment(),
  3758. a.ping())
  3759. }
  3760. function u() {
  3761. s.logout()["catch"](function() {
  3762. t.$emit(o.clientClose),
  3763. i.errorSticky("ERROR_LOGOUT_TITLE", "ERROR_LOGOUT_TEXT")
  3764. })
  3765. }
  3766. function d(t) {
  3767. e.url(t)
  3768. }
  3769. function m(e) {
  3770. r.update({
  3771. figureString: e
  3772. })
  3773. }
  3774. function p(e) {
  3775. r.update({
  3776. name: e
  3777. })
  3778. }
  3779. function h() {
  3780. return moment().diff(y, "seconds") < 60
  3781. }
  3782. function b() {
  3783. n.start("midroll")
  3784. }
  3785. function f(e) {
  3786. r.update({
  3787. buildersClubMember: e
  3788. })
  3789. }
  3790. function g(e) {
  3791. r.update({
  3792. habboClubMember: e
  3793. })
  3794. }
  3795. var _ = 300
  3796. , v = {}
  3797. , C = !1
  3798. , y = null
  3799. , E = null
  3800. , S = {
  3801. disconnect: l,
  3802. heartbeat: c,
  3803. logout: u,
  3804. "open-page": d,
  3805. "update-figure": m,
  3806. "update-name": p,
  3807. "show-interstitial": b,
  3808. "update-builders-club": f,
  3809. "update-habbo-club": g
  3810. };
  3811. return v.init = function() {
  3812. C = !1,
  3813. y = null
  3814. }
  3815. ,
  3816. v.handle = function(e) {
  3817. var t = S[e.call];
  3818. t && t(e.target)
  3819. }
  3820. ,
  3821. v.isAlive = function() {
  3822. return Boolean(y) && h()
  3823. }
  3824. ,
  3825. v.hasDied = function() {
  3826. return Boolean(y) && !h()
  3827. }
  3828. ,
  3829. v.hasDisconnected = function() {
  3830. return C
  3831. }
  3832. ,
  3833. v
  3834. }
  3835. ]),
  3836. angular.module("client.heartbeat.ping.service", ["config"]).factory("clientHeartbeatPing", ["$http", "CONFIG", function(e, t) {
  3837. var o = {};
  3838. return o.ping = function() {
  3839. return e.get(t.apiUrl + "/user/ping")
  3840. }
  3841. ,
  3842. o
  3843. }
  3844. ]),
  3845. angular.module("client.communication", ["client.listener", "client.messenger", "events"]).directive("habboClientCommunication", ["$timeout", "$window", "EVENTS", "clientListener", "clientMessenger", function(e, t, o, r, a) {
  3846. return {
  3847. restrict: "A",
  3848. link: function(n, i) {
  3849. function s(t) {
  3850. e(function() {
  3851. r.handle(t.originalEvent.data)
  3852. })
  3853. }
  3854. var l = i.get(0).contentWindow;
  3855. a.init(l),
  3856. n.$on(o.clientOpen, function(e, t) {
  3857. var o = n.$watch(r.isAlive, function(e) {
  3858. e && (a.handle(t),
  3859. o())
  3860. });
  3861. r.init()
  3862. }),
  3863. angular.element(t).on("message", s),
  3864. i.on("$destroy", function() {
  3865. angular.element(t).off("message", s)
  3866. })
  3867. }
  3868. }
  3869. }
  3870. ]),
  3871. angular.module("client", ["client.component", "client.disable.scrollbars"]),
  3872. angular.module("client.disable.scrollbars", ["events"]).directive("habboClientDisableScrollbars", ["EVENTS", function(e) {
  3873. return {
  3874. restrict: "A",
  3875. link: function(t, o) {
  3876. t.$on(e.clientOpen, function() {
  3877. o.css("overflow", "hidden")
  3878. }),
  3879. t.$on(e.clientClose, function() {
  3880. o.css("overflow", "")
  3881. })
  3882. }
  3883. }
  3884. }
  3885. ]),
  3886. angular.module("client.component", ["angularScreenfull", "client.close.expander", "client.close.fullscreen.on.hide", "client.closed", "client.communication", "client.error", "client.reload", "client.service", "events", "flash", "interstitial", "locale", "notifier", "router", "security", "storage", "system.data", "templates"]).component("habboClient", {
  3887. controller: ["$location", "$rootScope", "$scope", "$state", "Client", "EVENTS", "Session", "SystemData", "clientListener", "flash", "interstitial", "localStorage", "notifier", function(e, t, o, r, a, n, i, s, l, c, u, d, m) {
  3888. function p() {
  3889. var e = d.get("hotelLastAccess");
  3890. return moment().subtract(60, "minutes").isBefore(e)
  3891. }
  3892. function h() {
  3893. return g.client = a.get(),
  3894. g.running = !0,
  3895. g.client.$promise["catch"](function() {
  3896. g.running = !1,
  3897. m.error("ERROR_SERVER")
  3898. })
  3899. }
  3900. function b(e) {
  3901. e && (g.running = !1)
  3902. }
  3903. function f() {
  3904. !_ && i.hasPreRollAd() && (u.start("preroll"),
  3905. _ = !0)
  3906. }
  3907. var g = this
  3908. , _ = !1;
  3909. g.visible = !1,
  3910. g.flashEnabled = c.isEnabled(),
  3911. g.isOpen = s.isHotelOpen(),
  3912. p() || "/logout" === e.path() || h(),
  3913. g.close = function() {
  3914. t.$broadcast(n.clientClose)
  3915. }
  3916. ,
  3917. g.reload = function() {
  3918. t.$broadcast(n.clientOpen)
  3919. }
  3920. ,
  3921. o.$on(n.clientOpen, function() {
  3922. f(),
  3923. g.running || h(),
  3924. d.set("hotelLastAccess", Date.now()),
  3925. g.visible = !0
  3926. }),
  3927. o.$on(n.clientClose, function(e, t) {
  3928. g.visible = !1,
  3929. t || r.back()
  3930. }),
  3931. o.$on("$stateChangeSuccess", function(e, o, r, a) {
  3932. "hotel" === a.name && t.$broadcast(n.clientClose, !0)
  3933. }),
  3934. o.$watch(l.hasDied, b),
  3935. o.$watch(l.hasDisconnected, b)
  3936. }
  3937. ],
  3938. controllerAs: "ClientController",
  3939. templateUrl: "hotel/client/client.html"
  3940. }),
  3941. angular.module("client.close.fullscreen.on.hide", ["angularScreenfull", "events"]).directive("habboClientCloseFullscreenOnHide", ["EVENTS", function(e) {
  3942. return {
  3943. restrict: "A",
  3944. require: "ngsfFullscreen",
  3945. link: function(t, o, r, a) {
  3946. t.$on(e.clientClose, function() {
  3947. a.isFullscreen() && a.toggleFullscreen()
  3948. })
  3949. }
  3950. }
  3951. }
  3952. ]),
  3953. angular.module("client.service", ["ngResource", "config"]).factory("Client", ["$resource", "CONFIG", function(e, t) {
  3954. return e(t.apiUrl + "/client/clienturl")
  3955. }
  3956. ]),
  3957. angular.module("register.banner", ["air.download.link", "local.register.banner", "locale", "templates"]).component("habboRegisterBanner", {
  3958. templateUrl: "home/register-banner/register-banner.html"
  3959. }),
  3960. angular.module("promos.service", ["config"]).factory("promos", ["$http", "$q", "CONFIG", function(e, t, o) {
  3961. return {
  3962. get: function() {
  3963. var r = o.habboWebNewsUrl + "front.html";
  3964. return e.get(r).then(function(e) {
  3965. return {
  3966. html: e.data
  3967. }
  3968. })["catch"](function() {
  3969. return t.when({
  3970. html: ""
  3971. })
  3972. })
  3973. }
  3974. }
  3975. }
  3976. ]),
  3977. angular.module("news", ["ad.unit", "compile", "locale", "moderation.notification", "promos.service", "router", "templates", "web.pages"]).config(["$stateProvider", function(e) {
  3978. e.statePublic("home.news", {
  3979. url: "/",
  3980. controller: "NewsController",
  3981. controllerAs: "NewsController",
  3982. data: {
  3983. title: "HEAD_TITLE_NEWS"
  3984. },
  3985. resolve: {
  3986. promos: ["promos", function(e) {
  3987. return e.get()
  3988. }
  3989. ]
  3990. },
  3991. parent: "home",
  3992. templateUrl: "home/news/news.html"
  3993. })
  3994. }
  3995. ]).controller("NewsController", ["promos", function(e) {
  3996. var t = this;
  3997. t.promos = e.html
  3998. }
  3999. ]),
  4000. angular.module("messaging", ["discussions", "locale", "router", "templates", "user.service"]).config(["$stateProvider", function(e) {
  4001. e.statePrivate("home.messaging", {
  4002. url: "/messaging",
  4003. controller: "MessagingController",
  4004. controllerAs: "MessagingController",
  4005. data: {
  4006. title: "HEAD_TITLE_MESSAGING"
  4007. },
  4008. resolve: {
  4009. discussions: ["User", function(e) {
  4010. return e.discussions().$promise
  4011. }
  4012. ]
  4013. },
  4014. parent: "home",
  4015. templateUrl: "home/messaging/messaging.html"
  4016. })
  4017. }
  4018. ]).controller("MessagingController", ["discussions", function(e) {
  4019. var t = this;
  4020. t.discussions = e
  4021. }
  4022. ]),
  4023. angular.module("user.service", ["ngResource", "config", "storage"]).factory("User", ["$resource", "CONFIG", "httpCache", function(e, t, o) {
  4024. return e(t.apiUrl + "/user/:resource", null , {
  4025. discussions: {
  4026. method: "GET",
  4027. isArray: !0,
  4028. params: {
  4029. resource: "discussions"
  4030. },
  4031. cache: o.shortCache
  4032. }
  4033. })
  4034. }
  4035. ]),
  4036. angular.module("email.report.unauthorized.service", ["config", "google.analytics"]).factory("reportUnauthorized", ["$http", "CONFIG", "googleAnalytics", function(e, t, o) {
  4037. return function(r, a) {
  4038. return e.get(t.apiUrl + "/public/email/unauthorized/" + r + "/" + a).then(function() {
  4039. o.trackEvent("Email", "Unauthorized email reported")
  4040. })
  4041. }
  4042. }
  4043. ]),
  4044. angular.module("email.report.unauthorized", ["email.report.unauthorized.form", "header", "locale", "message.container", "router"]).config(["$stateProvider", function(e) {
  4045. e.statePublic("reportUnauthorized", {
  4046. url: "/identity/report_unauthorized_usage?email&hash",
  4047. controller: "EmailReportUnauthorizedController",
  4048. controllerAs: "EmailReportUnauthorizedController",
  4049. data: {
  4050. title: "HEAD_TITLE_EMAIL_REPORT_UNAUTHORIZED"
  4051. },
  4052. templateUrl: "email/email-report-unauthorized/email-report-unauthorized.html"
  4053. })
  4054. }
  4055. ]).controller("EmailReportUnauthorizedController", ["$stateParams", function(e) {
  4056. var t = this;
  4057. t.email = e.email,
  4058. t.hash = e.hash
  4059. }
  4060. ]),
  4061. angular.module("email.report.unauthorized.form", ["email.report.unauthorized.service", "locale", "notifier", "router", "templates"]).component("habboEmailReportUnauthorizedForm", {
  4062. bindings: {
  4063. emailaddress: "<",
  4064. hash: "<"
  4065. },
  4066. controller: ["$state", "notifier", "reportUnauthorized", function(e, t, o) {
  4067. var r = this;
  4068. r.reportInProgress = !1,
  4069. r.report = function() {
  4070. r.reportInProgress = !0,
  4071. o(r.emailaddress, r.hash).then(function() {
  4072. t.success("EMAIL_REPORT_UNAUTHORIZED_SUCCESS"),
  4073. e.go("home.news")
  4074. })["catch"](function() {
  4075. t.error("ERROR_SERVER")
  4076. })["finally"](function() {
  4077. r.reportInProgress = !1
  4078. })
  4079. }
  4080. }
  4081. ],
  4082. controllerAs: "EmailReportUnauthorizedFormController",
  4083. templateUrl: "email/email-report-unauthorized/email-report-unauthorized-form.html"
  4084. }),
  4085. angular.module("optout.service", ["config", "google.analytics"]).factory("optout", ["$http", "CONFIG", "googleAnalytics", function(e, t, o) {
  4086. return function(r, a) {
  4087. return e.get(t.apiUrl + "/public/email/optout/" + r + "/" + a).then(function() {
  4088. o.trackEvent("Email", "Optout")
  4089. })
  4090. }
  4091. }
  4092. ]),
  4093. angular.module("email.optout", ["locale", "notifier", "optout.service", "router"]).config(["$stateProvider", function(e) {
  4094. e.statePublic("optout", {
  4095. url: "/email/marketing_off?email&hash",
  4096. controller: "OptOutController",
  4097. resolve: {
  4098. optingout: ["$stateParams", "optout", function(e, t) {
  4099. return t(e.email, e.hash)
  4100. }
  4101. ]
  4102. }
  4103. })
  4104. }
  4105. ]).controller("OptOutController", ["$state", "notifier", function(e, t) {
  4106. t.success("OPTOUT_SUCCESS"),
  4107. e.go("home.news")
  4108. }
  4109. ]),
  4110. angular.module("rooms", ["avatar", "config", "leaderboard.service", "locale", "official.room.avatar", "router"]).config(["$stateProvider", function(e) {
  4111. e.statePublic("community.rooms", {
  4112. url: "/rooms",
  4113. parent: "community",
  4114. controller: "RoomsController",
  4115. controllerAs: "RoomsController",
  4116. templateUrl: "community/rooms/rooms.html",
  4117. data: {
  4118. title: "HEAD_TITLE_ROOMS"
  4119. },
  4120. resolve: {
  4121. rooms: ["Leaderboard", "CONFIG", function(e, t) {
  4122. return e.get({
  4123. site: t.hotel,
  4124. leaderboard: "visited-rooms",
  4125. timeframe: "daily",
  4126. date: "latest"
  4127. }).$promise
  4128. }
  4129. ]
  4130. }
  4131. })
  4132. }
  4133. ]).controller("RoomsController", ["rooms", function(e) {
  4134. var t = this;
  4135. t.rooms = e
  4136. }
  4137. ]),
  4138. angular.module("photos", ["columns", "locale", "photos.service", "router"]).config(["$stateProvider", function(e) {
  4139. e.statePublic("community.photos", {
  4140. url: "/photos",
  4141. parent: "community",
  4142. controller: "PhotosController",
  4143. controllerAs: "PhotosController",
  4144. templateUrl: "community/photos/photos.html",
  4145. data: {
  4146. title: "HEAD_TITLE_PHOTOS"
  4147. },
  4148. resolve: {
  4149. photos: ["Photos", function(e) {
  4150. return e.query().$promise
  4151. }
  4152. ]
  4153. }
  4154. })
  4155. }
  4156. ]).controller("PhotosController", ["photos", function(e) {
  4157. var t = this;
  4158. t.photos = e
  4159. }
  4160. ]),
  4161. angular.module("photos.service", ["ngResource", "config", "reported.photos", "safe.transform.response", "storage"]).factory("Photos", ["$resource", "CONFIG", "httpCache", "reportedPhotosFilter", "safeTransformResponse", function(e, t, o, r, a) {
  4162. return e(t.extraDataUrl + "/public/photos", null , {
  4163. query: {
  4164. isArray: !0,
  4165. cache: o.shortCache,
  4166. transformResponse: a.fromJson(function(e) {
  4167. var t = r(e);
  4168. return _.map(t, function(e) {
  4169. return _.assign(e, {
  4170. url: "https:" + e.url,
  4171. contentWidth: 320,
  4172. contentHeight: 320,
  4173. parentTitle: "PHOTOS_TITLE",
  4174. pool: "photos"
  4175. })
  4176. })
  4177. })
  4178. }
  4179. })
  4180. }
  4181. ]),
  4182. angular.module("fansites", ["ad.unit", "locale", "router", "templates", "web.pages"]).config(["$stateProvider", function(e) {
  4183. e.statePublic("community.fansites", {
  4184. url: "/fansites",
  4185. controller: "FansitesController",
  4186. controllerAs: "FansitesController",
  4187. data: {
  4188. title: "HEAD_TITLE_FANSITES"
  4189. },
  4190. resolve: {
  4191. fansites: ["webPages", function(e) {
  4192. return e.get("community/fansites")
  4193. }
  4194. ]
  4195. },
  4196. parent: "community",
  4197. templateUrl: "community/fansites/fansites.html"
  4198. })
  4199. }
  4200. ]).controller("FansitesController", ["fansites", function(e) {
  4201. var t = this;
  4202. t.fansites = e
  4203. }
  4204. ]),
  4205. angular.module("category.service", ["config"]).factory("category", ["$http", "CONFIG", function(e, t) {
  4206. return {
  4207. get: function(o, r) {
  4208. var a = o.replace(/-/g, "_")
  4209. , n = t.habboWebNewsUrl + a + "_" + r + ".html";
  4210. return e.get(n).then(function(e) {
  4211. return {
  4212. titleKey: angular.element(e.data).find(".news-category__link--active").attr("translate"),
  4213. html: e.data
  4214. }
  4215. })
  4216. }
  4217. }
  4218. }
  4219. ]),
  4220. angular.module("category", ["ad.unit", "category.service", "compile", "locale", "router", "templates", "web.pages"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  4221. e.statePublic("community.category", {
  4222. url: "/category/{category:(?:[^/]+)}{archive:(?:/[^0-9lst/]+)?}/{page}",
  4223. controller: "CategoryController",
  4224. controllerAs: "CategoryController",
  4225. onEnter: ["category", "Head", function(e, t) {
  4226. t.setTitle(e.titleKey)
  4227. }
  4228. ],
  4229. resolve: {
  4230. category: ["$location", "$q", "$stateParams", "category", function(e, t, o, r) {
  4231. var a = o.archive.replace("/", "_");
  4232. return r.get(o.category + a, o.page)["catch"](function(r) {
  4233. return 0 !== a.length || "1" !== o.page && "last" !== o.page ? a.length > 0 && "1" === o.page ? (e.path("/community/category").replace(),
  4234. t.when({})) : t.reject(r) : (e.path("/community/category/" + o.category + "/archive/1").replace(),
  4235. t.when({}))
  4236. })
  4237. }
  4238. ]
  4239. },
  4240. parent: "community",
  4241. templateUrl: "community/category/category.html"
  4242. }),
  4243. t.when("/community/category", "/community/category/all"),
  4244. t.when("/community/category/:category", "/community/category/:category/1")
  4245. }
  4246. ]).controller("CategoryController", ["category", function(e) {
  4247. var t = this;
  4248. t.category = e.html
  4249. }
  4250. ]),
  4251. angular.module("article.service", ["config"]).factory("article", ["$http", "CONFIG", function(e, t) {
  4252. return {
  4253. get: function(o, r) {
  4254. var a = r.replace(/-/g, "_")
  4255. , n = t.habboWebNewsUrl + "articles/" + o + "_" + a + ".html";
  4256. return e.get(n).then(function(e) {
  4257. var t = angular.element(e.data);
  4258. return {
  4259. title: t.find("h1, h2, h3, h4, h5, h6").eq(0).text(),
  4260. summary: t.find(".news-header__summary").text(),
  4261. image: t.find("img").eq(0).attr("src"),
  4262. html: e.data
  4263. }
  4264. })
  4265. }
  4266. }
  4267. }
  4268. ]),
  4269. angular.module("article", ["ad.unit", "article.service", "compile", "lightbox", "locale", "router", "social.share", "templates", "web.pages"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  4270. e.statePublic("community.article", {
  4271. url: "/article/:id/:title",
  4272. controller: "ArticleController",
  4273. controllerAs: "ArticleController",
  4274. onEnter: ["article", "Head", function(e, t) {
  4275. t.title = e.title,
  4276. t.description = e.summary,
  4277. t.image = e.image,
  4278. t.imageHeight = 300,
  4279. t.imageWidth = 759
  4280. }
  4281. ],
  4282. resolve: {
  4283. article: ["$stateParams", "article", function(e, t) {
  4284. return t.get(e.id, e.title)
  4285. }
  4286. ]
  4287. },
  4288. parent: "community",
  4289. templateUrl: "community/article/article.html"
  4290. }),
  4291. t.when("/article/:id/:slug", "/community/article/:id/:slug"),
  4292. t.when("/articles/{id:[0-9]*}-{slug:[a-z-]*}", "/article/:id/:slug")
  4293. }
  4294. ]).controller("ArticleController", ["article", function(e) {
  4295. var t = this;
  4296. t.article = e.html
  4297. }
  4298. ]),
  4299. angular.module("zendesk.url", ["config", "security"]).filter("zendeskRedirectUrl", ["CONFIG", "Session", function(e, t) {
  4300. var o = function(o, r) {
  4301. return r === !0 || t.hasSession() && _(o).includes("help.habbo") ? e.apiUrl + "/public/help?returnTo=" + o : o
  4302. }
  4303. ;
  4304. return o.$stateful = !0,
  4305. o
  4306. }
  4307. ]),
  4308. angular.module("web.pages.service", ["config"]).factory("webPages", ["$http", "CONFIG", function(e, t) {
  4309. return {
  4310. get: function(o) {
  4311. var r = t.habboWebPagesUrl + o + "." + t.lang + ".html";
  4312. return e.get(r).then(function(e) {
  4313. return e.data
  4314. })
  4315. }
  4316. }
  4317. }
  4318. ]),
  4319. angular.module("web.pages", ["web.pages.service"]).component("habboWebPages", {
  4320. bindings: {
  4321. key: "@"
  4322. },
  4323. controller: ["$animate", "$compile", "$element", "$scope", "webPages", function(e, t, o, r, a) {
  4324. e.addClass(o, "ng-hide"),
  4325. r.$watch("WebPagesController.key", function(n) {
  4326. a.get(n).then(function(a) {
  4327. var n = o.children().first();
  4328. n.html(a),
  4329. t(n.contents())(r),
  4330. e.removeClass(o, "ng-hide")
  4331. })
  4332. })
  4333. }
  4334. ],
  4335. controllerAs: "WebPagesController",
  4336. template: '<aside class="static-content"></aside>'
  4337. }),
  4338. angular.module("tabs", ["locale", "tab", "templates"]).component("habboTabs", {
  4339. bindings: {
  4340. titleKey: "@"
  4341. },
  4342. controller: function() {
  4343. var e = this;
  4344. e.open = !1,
  4345. e.tabs = [],
  4346. e.activeTab = null ,
  4347. e.setTab = function(t) {
  4348. e.tabs.push(t)
  4349. }
  4350. ,
  4351. e.setActive = function(t) {
  4352. e.open = !1,
  4353. e.activeTab = _.find(e.tabs, {
  4354. path: t
  4355. })
  4356. }
  4357. },
  4358. controllerAs: "TabsController",
  4359. templateUrl: "common/tabs/tabs.html",
  4360. transclude: !0
  4361. }),
  4362. angular.module("tab", ["locale", "templates"]).component("habboTab", {
  4363. require: {
  4364. HabboTabsController: "^habboTabs"
  4365. },
  4366. bindings: {
  4367. path: "@",
  4368. alternativePath: "@",
  4369. strictPath: "@",
  4370. translationKey: "@"
  4371. },
  4372. controller: ["$scope", "$location", function(e, t) {
  4373. function o() {
  4374. a.active = "true" === a.strictPath ? t.path() === a.path : r(),
  4375. a.active && a.HabboTabsController.setActive(a.path)
  4376. }
  4377. function r() {
  4378. return 0 === t.path().indexOf(a.path) || 0 === t.path().indexOf(a.alternativePath)
  4379. }
  4380. var a = this;
  4381. a.open = !1,
  4382. a.$onInit = function() {
  4383. a.HabboTabsController.setTab({
  4384. path: a.path,
  4385. translationKey: a.translationKey
  4386. }),
  4387. o()
  4388. }
  4389. ,
  4390. e.$on("$stateChangeSuccess", o)
  4391. }
  4392. ],
  4393. controllerAs: "TabController",
  4394. templateUrl: "common/tabs/tab.html"
  4395. }),
  4396. angular.module("system.data", []).factory("SystemData", ["$window", function(e) {
  4397. var t = {};
  4398. return t.geoLocation = {
  4399. continent: e.geoLocation ? e.geoLocation.continent : null ,
  4400. country: e.geoLocation ? e.geoLocation.country : null
  4401. },
  4402. t.getShopCountry = function() {
  4403. return "gb" === t.geoLocation.country ? "uk" : t.geoLocation.country
  4404. }
  4405. ,
  4406. t.isHotelOpen = function() {
  4407. var t = e.systemData && e.systemData.open;
  4408. return t !== !1
  4409. }
  4410. ,
  4411. t.isIDCGamesCountry = function() {
  4412. var t = e.partnerCodeInfo && e.partnerCodeInfo.partner;
  4413. return "idcse" === t
  4414. }
  4415. ,
  4416. t
  4417. }
  4418. ]),
  4419. angular.module("storage", ["cache", "local.storage"]),
  4420. angular.module("sticky.header", []).directive("habboStickyHeader", ["$window", function(e) {
  4421. return {
  4422. restrict: "A",
  4423. link: function(t, o) {
  4424. function r() {
  4425. var t = e.pageYOffset > 0 ? e.pageYOffset : 0
  4426. , r = i - t;
  4427. t <= o.height() ? o.addClass("sticky-header--top") : o.removeClass("sticky-header--top"),
  4428. 0 === t && o.removeClass("sticky-header--fixed"),
  4429. r > 0 && a(r) && t > o.height() ? o.addClass("sticky-header--fixed") : 0 > r && a(r) && (o.hasClass("sticky-header--fixed") && o.addClass("sticky-header--hidden"),
  4430. o.removeClass("sticky-header--fixed")),
  4431. (o.hasClass("sticky-header--fixed") || o.hasClass("sticky-header--top")) && o.removeClass("sticky-header--hidden"),
  4432. i = t
  4433. }
  4434. function a(e) {
  4435. return Math.abs(e) > n
  4436. }
  4437. var n = 5
  4438. , i = e.pageYOffset;
  4439. i <= o.height() ? o.addClass("sticky-header sticky-header--top") : o.addClass("sticky-header sticky-header--fixed"),
  4440. angular.element(e).on("orientationchange resize scroll", r),
  4441. o.on("$destroy", function() {
  4442. angular.element(e).off("orientationchange resize scroll", r)
  4443. })
  4444. }
  4445. }
  4446. }
  4447. ]),
  4448. angular.module("social.share", ["config", "google.analytics", "locale", "popup", "router", "templates"]).component("habboSocialShare", {
  4449. controller: ["$location", "CONFIG", "Head", "googleAnalytics", "popup", function(e, t, o, r, a) {
  4450. var n = this;
  4451. n.shareOnFacebook = function() {
  4452. var t = $.param({
  4453. u: e.absUrl()
  4454. })
  4455. , o = "http://www.facebook.com/sharer.php?" + t;
  4456. r.trackSocial("Facebook", "Share", e.url()),
  4457. a.open(o, 626, 436)
  4458. }
  4459. ,
  4460. n.shareOnTwitter = function() {
  4461. var n = $.param({
  4462. url: e.absUrl(),
  4463. text: o.title,
  4464. hashtags: "Habbo",
  4465. related: t.twitterAccount.substring(1)
  4466. })
  4467. , i = "https://twitter.com/intent/tweet?" + n;
  4468. r.trackSocial("Twitter", "Tweet", e.url()),
  4469. a.open(i, 550, 420)
  4470. }
  4471. }
  4472. ],
  4473. controllerAs: "SocialShareController",
  4474. templateUrl: "common/social-share/social-share.html"
  4475. }),
  4476. angular.module("show.on.load", []).directive("habboShowOnLoad", function() {
  4477. return {
  4478. restrict: "A",
  4479. link: function(e, t) {
  4480. t.hide(),
  4481. t.on("load", function() {
  4482. t.show()
  4483. })
  4484. }
  4485. }
  4486. }),
  4487. angular.module("safe.transform.response", []).factory("safeTransformResponse", function() {
  4488. var e = {};
  4489. return e.fromJson = function(e) {
  4490. return function(t) {
  4491. var o;
  4492. try {
  4493. return o = angular.fromJson(t),
  4494. e(o)
  4495. } catch (r) {
  4496. return t
  4497. }
  4498. }
  4499. }
  4500. ,
  4501. e
  4502. }),
  4503. angular.module("reported.photos.service", ["storage"]).factory("reportedPhotos", ["localStorage", function(e) {
  4504. var t = "reportedPhotos"
  4505. , o = {}
  4506. , r = e.get(t) || [];
  4507. return o.save = function(o) {
  4508. r.push(o),
  4509. e.set(t, r)
  4510. }
  4511. ,
  4512. o.get = function() {
  4513. return r
  4514. }
  4515. ,
  4516. o
  4517. }
  4518. ]),
  4519. angular.module("reported.photos", ["reported.photos.service"]).filter("reportedPhotos", ["reportedPhotos", function(e) {
  4520. return function(t) {
  4521. var o = e.get();
  4522. return _.filter(t, function(e) {
  4523. return !_.includes(o, e.id)
  4524. })
  4525. }
  4526. }
  4527. ]),
  4528. angular.module("remove.on.error", []).directive("habboRemoveOnError", function() {
  4529. return {
  4530. restrict: "A",
  4531. link: function(e, t) {
  4532. t[0].onerror = function() {
  4533. t.remove()
  4534. }
  4535. }
  4536. }
  4537. }),
  4538. angular.module("popup", []).factory("popup", ["$interval", "$q", "$window", function(e, t, o) {
  4539. function r(e, t) {
  4540. var r = o.innerWidth
  4541. , i = o.innerHeight;
  4542. return e = e || n,
  4543. t = t || a,
  4544. ["width=" + (r >= e ? e : r), "height=" + (i >= t ? t : i)].join(",")
  4545. }
  4546. var a = 768
  4547. , n = 1024
  4548. , i = {};
  4549. return i.open = function(a, n, i) {
  4550. var s = t.defer()
  4551. , l = o.open(a, "_blank", r(n, i))
  4552. , c = e(function() {
  4553. l && !l.closed || (s.resolve(),
  4554. e.cancel(c))
  4555. }, 100);
  4556. return s.promise
  4557. }
  4558. ,
  4559. i
  4560. }
  4561. ]),
  4562. angular.module("official.room.avatar", ["locale", "templates"]).component("officialRoomAvatar", {
  4563. templateUrl: "common/official-room-avatar/official-room-avatar.html"
  4564. }),
  4565. angular.module("notifier", ["locale"]).factory("notifier", ["$q", "$translate", function(e, t) {
  4566. var o = {
  4567. extendedTimeOut: 1e3,
  4568. hideDuration: 300,
  4569. positionClass: "toast-top-center",
  4570. preventDuplicates: !0,
  4571. progressBar: !0,
  4572. showDuration: 300,
  4573. timeOut: 2e4
  4574. }
  4575. , r = _.extend({}, o, {
  4576. extendedTimeOut: 0,
  4577. hideDuration: 0,
  4578. positionClass: "toast-top-center toast-sticky",
  4579. timeOut: 0,
  4580. tapToDismiss: !1
  4581. })
  4582. , a = _.partialRight(toastr.success, "", o)
  4583. , n = _.partialRight(toastr.error, "", o)
  4584. , i = _.partialRight(toastr.error, r)
  4585. , s = function(e) {
  4586. return function(o, r) {
  4587. t(o, r).then(e)["catch"](e)
  4588. }
  4589. }
  4590. , l = function(o) {
  4591. return function(r, a, n) {
  4592. e.all([t(a, n), t(r), t("OK_BUTTON")]).then(function(e) {
  4593. var t = o(e[0] + '<button class="toast-button">' + e[2] + "</button>", e[1]);
  4594. t.delegate("button", "click", function() {
  4595. toastr.options.hideDuration = 0,
  4596. toastr.clear(t, {
  4597. force: !0
  4598. })
  4599. })
  4600. })
  4601. }
  4602. }
  4603. ;
  4604. return {
  4605. success: s(a),
  4606. error: s(n),
  4607. errorSticky: l(i)
  4608. }
  4609. }
  4610. ]),
  4611. angular.module("navigate.to.on.key", []).directive("habboNavigateToOnKey", ["$document", function(e) {
  4612. function t(e) {
  4613. var t = {
  4614. left: 37,
  4615. right: 39
  4616. };
  4617. return t[e]
  4618. }
  4619. return {
  4620. restrict: "A",
  4621. link: function(o, r, a) {
  4622. function n(e) {
  4623. e.which === i && (e.preventDefault(),
  4624. r.trigger("click"))
  4625. }
  4626. var i = t(a.habboNavigateToOnKey);
  4627. angular.element(e).keydown(n),
  4628. r.on("$destroy", function() {
  4629. angular.element(e).unbind("keydown", n)
  4630. })
  4631. }
  4632. }
  4633. }
  4634. ]),
  4635. angular.module("message.container", ["angular-multiple-transclusion", "templates"]).component("habboMessageContainer", {
  4636. templateUrl: "common/message-container/message-container.html",
  4637. transclude: !0
  4638. }),
  4639. angular.module("my.like.cache", []).factory("myLikeCache", function() {
  4640. var e = {}
  4641. , t = {};
  4642. return e.like = function(e) {
  4643. t[e] = "like"
  4644. }
  4645. ,
  4646. e.unlike = function(e) {
  4647. t[e] = "unlike"
  4648. }
  4649. ,
  4650. e.hasLike = function(e) {
  4651. return "like" === t[e]
  4652. }
  4653. ,
  4654. e.hasUnlike = function(e) {
  4655. return "unlike" === t[e]
  4656. }
  4657. ,
  4658. e
  4659. }),
  4660. angular.module("like.service", ["config", "like.filters", "my.like.cache", "security"]).factory("like", ["$http", "CONFIG", "Session", "myLikeCache", function(e, t, o, r) {
  4661. function a(e, t) {
  4662. 401 !== t && (r.like(e.id),
  4663. e.likes = _.uniq(e.likes.concat(o.user.name)))
  4664. }
  4665. function n(e, t) {
  4666. 401 !== t && (r.unlike(e.id),
  4667. _.remove(e.likes, _.matches(o.user.name)))
  4668. }
  4669. var i = {};
  4670. return i.like = function(o) {
  4671. e.post(t.extraDataUrl + "/private/like/" + o.id).then(function(e) {
  4672. a(o, e.status)
  4673. })["catch"](function(e) {
  4674. a(o, e.status)
  4675. })
  4676. }
  4677. ,
  4678. i.unlike = function(o) {
  4679. e.post(t.extraDataUrl + "/private/unlike/" + o.id).then(function(e) {
  4680. n(o, e.status)
  4681. })["catch"](function(e) {
  4682. n(o, e.status)
  4683. })
  4684. }
  4685. ,
  4686. i
  4687. }
  4688. ]),
  4689. angular.module("like.filters", ["security"]).filter("myLike", ["Session", function(e) {
  4690. return function(t) {
  4691. return _.find(t.likes, function(t) {
  4692. return e.hasSession() ? t === e.user.name : !1
  4693. })
  4694. }
  4695. }
  4696. ]).filter("othersLikes", ["Session", function(e) {
  4697. return function(t) {
  4698. return _.filter(t.likes, function(t) {
  4699. return e.hasSession() ? t !== e.user.name : !0
  4700. })
  4701. }
  4702. }
  4703. ]),
  4704. angular.module("like", ["avatar", "false.on.outside.click", "like.filters", "like.service", "locale", "my.like.cache", "security", "templates"]).component("habboLike", {
  4705. bindings: {
  4706. data: "="
  4707. },
  4708. controller: ["$timeout", "Session", "like", "myLikeCache", "myLikeFilter", function(e, t, o, r, a) {
  4709. var n = this
  4710. , i = a(n.data);
  4711. r.hasLike(n.data.id) && !i && n.data.likes.push(t.user.name),
  4712. r.hasUnlike(n.data.id) && i && _.remove(n.data.likes, _.matches(i)),
  4713. n.show = !1,
  4714. n.mouseenter = function() {
  4715. e(function() {
  4716. n.show = !0
  4717. })
  4718. }
  4719. ,
  4720. n.like = function() {
  4721. o.like(n.data)
  4722. }
  4723. ,
  4724. n.unlike = function() {
  4725. o.unlike(n.data)
  4726. }
  4727. }
  4728. ],
  4729. controllerAs: "LikeController",
  4730. templateUrl: "common/like/like.html"
  4731. }),
  4732. angular.module("lightbox.modal", ["templates", "ui.bootstrap"]).controller("LightboxController", ["src", function(e) {
  4733. var t = this;
  4734. t.src = e
  4735. }
  4736. ]).factory("lightbox", ["$uibModal", function(e) {
  4737. var t = {};
  4738. return t.open = function(t) {
  4739. return e.open({
  4740. animation: !1,
  4741. backdropClass: "lightbox-backdrop",
  4742. controller: "LightboxController",
  4743. controllerAs: "LightboxController",
  4744. resolve: {
  4745. src: _.constant(t)
  4746. },
  4747. templateUrl: "common/lightbox/lightbox-modal.html",
  4748. windowClass: "lightbox-modal"
  4749. }).result
  4750. }
  4751. ,
  4752. t
  4753. }
  4754. ]),
  4755. angular.module("lightbox", ["lightbox.modal"]).directive("habboLightbox", ["lightbox", function(e) {
  4756. return {
  4757. restrict: "A",
  4758. link: function(t, o, r) {
  4759. o.click(function(t) {
  4760. t.preventDefault(),
  4761. e.open(r.href)
  4762. })
  4763. }
  4764. }
  4765. }
  4766. ]),
  4767. angular.module("leaderboard.service", ["ngResource", "config", "storage"]).factory("Leaderboard", ["$resource", "CONFIG", "httpCache", function(e, t, o) {
  4768. return e(t.habboWebLeaderboardsUrl + "/:site/:leaderboard/:timeframe/:date.json", null , {
  4769. get: {
  4770. method: "GET",
  4771. isArray: !0,
  4772. cache: o.shortCache
  4773. }
  4774. })
  4775. }
  4776. ]),
  4777. angular.module("imager.service", ["angular-md5", "config"]).factory("imager", ["CONFIG", "md5", function(e, t) {
  4778. function o(e) {
  4779. return _(e).transform(function(e, t, o) {
  4780. return e.push(o + "-" + t),
  4781. e
  4782. }, []).join(".")
  4783. }
  4784. var r = {}
  4785. , a = "ef2356a4926bf225eb86c75c52309c32";
  4786. return r.generatePose = function(e) {
  4787. var t = e.size || "big"
  4788. , o = e.direction || "sw"
  4789. , r = e.headDirection || o
  4790. , a = e.action || "stand"
  4791. , n = e.gesture || "smile"
  4792. , i = {};
  4793. return i.s = {
  4794. big: 0,
  4795. bighead: 2,
  4796. smallhead: 3,
  4797. large: 4,
  4798. largehead: 5
  4799. }[t.toLowerCase()],
  4800. i.g = {
  4801. none: 0,
  4802. smile: 1,
  4803. angry: 2,
  4804. surprise: 3,
  4805. sad: 4,
  4806. speak: 5,
  4807. eyebrows: 6
  4808. }[n.toLowerCase()],
  4809. i.d = {
  4810. nw: 0,
  4811. w: 1,
  4812. sw: 2,
  4813. s: 3,
  4814. se: 4,
  4815. e: 5,
  4816. ne: 6,
  4817. n: 7
  4818. }[o.toLowerCase()],
  4819. i.h = {
  4820. nw: 0,
  4821. w: 1,
  4822. sw: 2,
  4823. s: 3,
  4824. se: 4,
  4825. e: 5,
  4826. ne: 6,
  4827. n: 7
  4828. }[r.toLowerCase()],
  4829. i.a = {
  4830. stand: 0,
  4831. sit: 1,
  4832. walk: 2,
  4833. wave: 3,
  4834. lay: 4,
  4835. carry: 5,
  4836. drink: 6
  4837. }[a.toLowerCase()],
  4838. i
  4839. }
  4840. ,
  4841. r.get2xSize = function(e) {
  4842. return {
  4843. big: "large",
  4844. bighead: "largehead",
  4845. smallhead: "bighead"
  4846. }[e || "big"]
  4847. }
  4848. ,
  4849. r.getDimensions = function(e) {
  4850. return {
  4851. big: {
  4852. width: 64,
  4853. height: 110
  4854. },
  4855. bighead: {
  4856. width: 54,
  4857. height: 62
  4858. },
  4859. smallhead: {
  4860. width: 27,
  4861. height: 30
  4862. },
  4863. large: {
  4864. width: 128,
  4865. height: 220
  4866. },
  4867. largehead: {
  4868. width: 108,
  4869. height: 124
  4870. }
  4871. }[e || "big"]
  4872. }
  4873. ,
  4874. r.getImagerUrl = function(r, n) {
  4875. var i = o(n)
  4876. , s = t.createHash(r + i + a);
  4877. return e.imagingUrl + "/avatar/" + encodeURIComponent(r + "," + i + "," + s) + ".png"
  4878. }
  4879. ,
  4880. r.getLegacyImagerUrl = function(t, o) {
  4881. return e.imagingUrl + "/avatarimage?" + $.param({
  4882. user: t,
  4883. headonly: 2 === o.s || 3 === o.s || 5 === o.s ? 1 : 0,
  4884. size: {
  4885. 0: "b",
  4886. 1: "s",
  4887. 2: "b",
  4888. 3: "s",
  4889. 4: "l",
  4890. 5: "l"
  4891. }[o.s],
  4892. gesture: {
  4893. 0: "",
  4894. 1: "sml",
  4895. 2: "agr",
  4896. 3: "srp",
  4897. 4: "sad",
  4898. 5: "spk",
  4899. 6: "eyb"
  4900. }[o.g],
  4901. direction: o.d,
  4902. head_direction: o.h,
  4903. action: {
  4904. 0: "std",
  4905. 1: "sit",
  4906. 2: "wlk",
  4907. 3: "wav",
  4908. 4: "lay",
  4909. 5: "crr",
  4910. 6: "drk"
  4911. }[o.a]
  4912. })
  4913. }
  4914. ,
  4915. r
  4916. }
  4917. ]),
  4918. angular.module("imager", ["imager.service", "templates"]).component("habboImager", {
  4919. bindings: {
  4920. figure: "@",
  4921. user: "@",
  4922. name: "@",
  4923. size: "@",
  4924. direction: "@",
  4925. headDirection: "@",
  4926. action: "@",
  4927. gesture: "@"
  4928. },
  4929. controller: ["$scope", "imager", function(e, t) {
  4930. function o(e) {
  4931. var o = {
  4932. size: e || r.size,
  4933. direction: r.direction,
  4934. headDirection: r.headDirection,
  4935. action: r.action,
  4936. gesture: r.gesture
  4937. }
  4938. , a = t.generatePose(o);
  4939. return r.figure ? t.getImagerUrl(r.figure, a) : r.user ? t.getLegacyImagerUrl(r.user, a) : void 0
  4940. }
  4941. var r = this;
  4942. r.dimensions = t.getDimensions(r.size),
  4943. r.src = o();
  4944. var a = "bighead" === r.size && r.figure ? null : t.get2xSize(r.size);
  4945. a && (r.src2x = o(a))
  4946. }
  4947. ],
  4948. controllerAs: "ImagerController",
  4949. templateUrl: "common/imager/imager.html"
  4950. }),
  4951. angular.module("hotel.closed", ["locale", "templates"]).component("habboHotelClosed", {
  4952. templateUrl: "common/hotel-closed/hotel-closed.html"
  4953. }),
  4954. angular.module("header", ["header.ad", "locale", "navigation", "security", "sticky.header", "templates", "user.menu"]).component("habboHeaderLarge", {
  4955. bindings: {
  4956. active: "@"
  4957. },
  4958. controllerAs: "HeaderLargeController",
  4959. templateUrl: "common/header/header-large.html",
  4960. transclude: !0
  4961. }).component("habboHeaderSmall", {
  4962. bindings: {
  4963. active: "@"
  4964. },
  4965. controller: ["loginModal", function(e) {
  4966. var t = this;
  4967. t.openLoginModal = e.open
  4968. }
  4969. ],
  4970. controllerAs: "HeaderSmallController",
  4971. templateUrl: "common/header/header-small.html",
  4972. transclude: !0
  4973. }),
  4974. angular.module("group.badge", ["config", "templates"]).component("habboGroupBadge", {
  4975. bindings: {
  4976. code: "@",
  4977. name: "@"
  4978. },
  4979. controller: ["CONFIG", function(e) {
  4980. var t = this;
  4981. t.imagingUrl = e.imagingUrl
  4982. }
  4983. ],
  4984. controllerAs: "GroupBadgeController",
  4985. templateUrl: "common/group-badge/group-badge.html"
  4986. }),
  4987. angular.module("google.analytics", []).factory("googleAnalytics", ["$window", function(e) {
  4988. function t(t) {
  4989. e.Bugsnag && e.Bugsnag.notifyException(t, "GA not supported", {
  4990. groupingHash: "GA"
  4991. }, "info")
  4992. }
  4993. var o = {};
  4994. return o.trackEvent = function(o, r, a, n) {
  4995. try {
  4996. e.ga("send", "event", o, r, a, n)
  4997. } catch (i) {
  4998. t(i)
  4999. }
  5000. }
  5001. ,
  5002. o.trackPageView = function(o) {
  5003. try {
  5004. e.ga("send", "pageview", o)
  5005. } catch (r) {
  5006. t(r)
  5007. }
  5008. }
  5009. ,
  5010. o.trackSocial = function(o, r, a) {
  5011. try {
  5012. e.ga("send", "social", o, r, a)
  5013. } catch (n) {
  5014. t(n)
  5015. }
  5016. }
  5017. ,
  5018. o.trackTransaction = function(o, r, a, n, i, s) {
  5019. try {
  5020. e.ga("ecommerce:addTransaction", {
  5021. id: o,
  5022. currency: s,
  5023. revenue: i
  5024. }),
  5025. e.ga("ecommerce:addItem", {
  5026. id: o,
  5027. name: r,
  5028. sku: a,
  5029. category: n,
  5030. price: i,
  5031. quantity: "1"
  5032. }),
  5033. e.ga("ecommerce:send")
  5034. } catch (l) {
  5035. t(l)
  5036. }
  5037. }
  5038. ,
  5039. o
  5040. }
  5041. ]).run(["$location", "$rootScope", "$timeout", "googleAnalytics", function(e, t, o, r) {
  5042. t.$on("$stateChangeSuccess", function() {
  5043. o(function() {
  5044. r.trackPageView(e.url())
  5045. })
  5046. })
  5047. }
  5048. ]),
  5049. angular.module("form", ["captcha", "email.address", "password.current", "password.new", "password.toggle.mask", "search", "validators"]),
  5050. angular.module("footer", ["locale", "templates", "zendesk.url"]).constant("FOOTER_LINKS", ["FOOTER_SUPPORT", "FOOTER_SAFETY", "FOOTER_PARENTS", "FOOTER_TOS_AND_PRIVACY", "FOOTER_ADVERTISERS"]).component("habboFooter", {
  5051. controller: ["FOOTER_LINKS", function(e) {
  5052. var t = this;
  5053. t.links = e,
  5054. t.currentYear = (new Date).getFullYear()
  5055. }
  5056. ],
  5057. controllerAs: "FooterController",
  5058. templateUrl: "common/footer/footer.html"
  5059. }),
  5060. angular.module("flash.require", ["flash.service"]).directive("habboRequireFlash", ["flash", "ngIfDirective", function(e, t) {
  5061. var o = t[0];
  5062. return {
  5063. restrict: "A",
  5064. priority: o.priority,
  5065. terminal: o.terminal,
  5066. transclude: o.transclude,
  5067. link: function(t, r, a) {
  5068. a.ngIf = e.isSupported,
  5069. o.link.apply(o, arguments)
  5070. }
  5071. }
  5072. }
  5073. ]),
  5074. angular.module("flash", ["flash.href", "flash.require", "flash.service"]),
  5075. angular.module("flash.service", []).factory("flash", function() {
  5076. var e = {};
  5077. return e.isEnabled = function() {
  5078. return swfobject.hasFlashPlayerVersion("11")
  5079. }
  5080. ,
  5081. e.isSupported = function() {
  5082. return e.isEnabled() || !bowser.mobile
  5083. }
  5084. ,
  5085. e
  5086. }),
  5087. angular.module("flash.href", ["flash.service"]).directive("habboFlashHref", ["flash", function(e) {
  5088. return {
  5089. restrict: "A",
  5090. link: function(t, o, r) {
  5091. e.isSupported() && r.$observe("habboFlashHref", function(e) {
  5092. e && r.$set("href", e)
  5093. })
  5094. }
  5095. }
  5096. }
  5097. ]),
  5098. angular.module("false.on.outside.click", []).directive("habboFalseOnOutsideClick", function() {
  5099. return {
  5100. restrict: "A",
  5101. link: function(e, t, o) {
  5102. function r(r) {
  5103. 0 === angular.element(r.target).closest(t).length && e.$apply(function() {
  5104. e.$eval(o.habboFalseOnOutsideClick + " = false;")
  5105. })
  5106. }
  5107. e.$watch(o.habboFalseOnOutsideClick, function(e) {
  5108. e ? angular.element("body").on("click touchstart", r) : angular.element("body").off("click touchstart", r)
  5109. }),
  5110. t.on("$destroy", function() {
  5111. angular.element("body").off("click touchstart", r)
  5112. })
  5113. }
  5114. }
  5115. }),
  5116. angular.module("eu.cookie.banner", ["locale", "storage", "system.data", "templates"]).component("habboEuCookieBanner", {
  5117. controller: ["SystemData", "localStorage", function(e, t) {
  5118. var o = this;
  5119. o.show = !1,
  5120. t.get("acceptCookies") || ("eu" === e.geoLocation.continent ? o.show = !0 : t.set("acceptCookies", !0)),
  5121. o.close = function() {
  5122. o.show = !1,
  5123. t.set("acceptCookies", !0)
  5124. }
  5125. }
  5126. ],
  5127. controllerAs: "EuCookieBannerController",
  5128. templateUrl: "common/eu-cookie-banner/eu-cookie-banner.html"
  5129. }),
  5130. angular.module("encode.uri.component", []).filter("encodeURIComponent", ["$window", function(e) {
  5131. return e.encodeURIComponent
  5132. }
  5133. ]),
  5134. angular.module("empty.results", ["locale", "templates"]).component("habboEmptyResults", {
  5135. bindings: {
  5136. translationKey: "@"
  5137. },
  5138. controllerAs: "EmptyResultsController",
  5139. templateUrl: "common/empty-results/empty-results.html"
  5140. }),
  5141. angular.module("creation.href", ["encode.uri.component"]).directive("habboCreationHref", ["encodeURIComponentFilter", function(e) {
  5142. return {
  5143. restrict: "A",
  5144. link: function(t, o, r) {
  5145. t.$watch(r.habboCreationHref, function(t) {
  5146. if (t) {
  5147. var o = "PHOTO" === t.type ? "photo" : "story"
  5148. , a = ["profile", e(t.creator_name), o, t.id].join("/");
  5149. t.pool && (a += "?pool=" + t.pool),
  5150. r.$set("href", "/" + a)
  5151. }
  5152. })
  5153. }
  5154. }
  5155. }
  5156. ]),
  5157. angular.module("console.warning", ["locale"]).factory("warning", function() {
  5158. var e = {};
  5159. return e.HEADER = [" ,,, ", " ,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,, ,,,,,,,,,, ,::,, ", ",,@@@@@@@@@@@@@@:,:@@@@@@@@::@@@@@@@@@@@::@@@@@@@@@@@@:,,,:@@@@@@@@:,,,::: :, ", ",,@@@@@@@@@@@@@@@:@@@@@@@@@@:@@@@@@@@@@@@@@@@@@@@@@@@@@:,:@@@@@@@@@@:,: : ,,", ",,@@,,,,,@,,,,,,@@,,,,,,,,,,@@,,,,,,,,,,,@@@,,,,,,,,,,@@@@,,,,,,,,,,@@: :: ,,", ",,@@,,,,,@,,,,,,@@,,,,,,,,,,@@,,,,,,,,,,,,@@,,,,,,,,,,,@@@,,,,,,,,,,@@:::: :,,", ",,@@,,,,,@,,,,,,@,,,,,,,,,,,,@,,,,,,,,,,,,@@,,,,,,,,,,,,@,,,,,,,,,,,,@@@::,,, ", ",,@@,,,,,@,,,,,,@,,,,,,,,,,,,@,,,,,,,,,,,,@@,,,,,,,,,,,,@,,,,,,,,,,,,@@@:,,, ", ",,@@,,,,,@,,,,,,@,,,,,@@,,,,,@,,,,,,@,,,,,@@,,,,,@,,,,,,@,,,,,@@,,,,,@;;@@,, ", ",,@@,,,,,@,,,,,,@,,,,,@@,,,,,@,,,,,,@,,,,,@@,,,,,@,,,,,,@,,,,,@@,,,,,@;;@@:, ", ",,@@,,,,,,,,,,,,@,,,,,@@,,,,,@,,,,,,@,,,,,@@,,,,,@,,,,,,@,,,,,@@,,,,,@;;;;@:, ", ",,@@,,,,,,,,,,,,@,,,,,@@,,,,,@,,,,,,,,,,,,@@,,,,,,,,,,,,@,,,,,@@,,,,,@;;;;@@,,", ",,@@,,,,,,,,,,,,@,,,,,@@,,,,,@,,,,,,,,,,@@@@,,,,,,,,,,@@@,,,,,@@,,,,,@;;;;@@,,", ",,@@::::::::::::@:::::@@:::::@::::::::::@@@@::::::::::@@@:::::@@:::::@;;;;@@,,", ",,@@::::::::::::@::::::::::::@::::::::::::@@::::::::::::@:::::@@:::::@;;;;@@,,", ",,@@::::::::::::@::::::::::::@::::::@:::::@@:::::@::::::@:::::@@:::::@;;;;@@,,", ",,@@:::::@::::::@::::::::::::@::::::@:::::@@:::::@::::::@:::::@@:::::@;;;;@@,,", ",,@@:::::@::::::@:::::@@:::::@::::::@:::::@@:::::@::::::@:::::@@:::::@;;;;@@,,", ",,@@:::::@::::::@:::::@@:::::@::::::::::::@@::::::::::::@::::::::::::@;;;;@@,,", ",,@@:::::@::::::@:::::@@:::::@::::::::::::@@::::::::::::@::::::::::::@;;;;@@,,", ",,@@:::::@::::::@:::::@@:::::@::::::::::::@@:::::::::::@@@::::::::::@@;;;;@@,,", ",,@@:::::@::::::@:::::@@:::::@:::::::::::@@@::::::::::@@@@::::::::::@@;;;;@@,,", ",,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;;;@@@@@@@@@@;;;;;;@@,,", ",,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;;@@@@@@@@@@@;;;;;@@@@@@@@@;;;;;;;@@,,", ",,,:@@;;;;@@;;;;;@@;;;;;@@;;;;@@;;;;;;;;;;;;@@;;;;;;;;;;;;;;@@;;;;;;;;;;;;@@,,", " ,,,@@;;;;;@@;;;;;@@;;;;@@;;;;;@@;;;;;;;;;;;@@;;;;;;;;;;;;;;@@;;;;;;;;;;;;@:,,", " ,,,:@@;;;;@@;;;;;@@;;;;;@@;;;;@@;;;;;;;;;;@@@@;;;;;;;;;;@@@:@@;;;;;;;;@@:,, ", " ,,,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@:,@@@@@@@@@@@@,,, ", " ,,,:::::::::::::::::::::::::::::::::::::::,::::::::::::,,,,,::::::::,,,, ", " ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ", " ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,, ", " ", " "],
  5160. e.FOOTER = [" ", " - Habbo Dev"],
  5161. e.format = function(t) {
  5162. var o = []
  5163. , r = "";
  5164. return t.split(" ").forEach(function(t) {
  5165. r.length + t.length + 5 > e.HEADER[0].length && (o.push(r),
  5166. r = ""),
  5167. r += t + " "
  5168. }),
  5169. r && o.push(r),
  5170. _.map(o, function(e) {
  5171. return " " + e.trim()
  5172. })
  5173. }
  5174. ,
  5175. e
  5176. }).run(["$log", "$translate", "warning", function(e, t, o) {
  5177. t("CONSOLE_WARNING").then(function(t) {
  5178. var r = o.format(t);
  5179. e.info(o.HEADER.join("\n") + "\n" + r.join("\n") + "\n" + o.FOOTER.join("\n"))
  5180. })
  5181. }
  5182. ]),
  5183. angular.module("compile", []).component("habboCompile", {
  5184. bindings: {
  5185. data: "<"
  5186. },
  5187. controller: ["$compile", "$element", "$scope", function(e, t, o) {
  5188. var r = this;
  5189. t.html(r.data),
  5190. e(t.contents())(o)
  5191. }
  5192. ]
  5193. }),
  5194. angular.module("columns", ["columns.channel", "columns.profile"]),
  5195. angular.module("by.name.description.or.motto.filter", []).filter("byNameDescriptionOrMotto", function() {
  5196. return function(e, t) {
  5197. return _.filter(e, function(e) {
  5198. return !t || e.name && _(e.name.toLowerCase()).includes(t.toLowerCase()) || e.description && _(e.description.toLowerCase()).includes(t.toLowerCase()) || e.motto && _(e.motto.toLowerCase()).includes(t.toLowerCase())
  5199. })
  5200. }
  5201. }),
  5202. angular.module("badge", ["config", "templates"]).component("habboBadge", {
  5203. bindings: {
  5204. code: "@",
  5205. name: "@"
  5206. },
  5207. controller: ["CONFIG", function(e) {
  5208. var t = this;
  5209. t.badgeUrl = e.badgeUrl
  5210. }
  5211. ],
  5212. controllerAs: "BadgeController",
  5213. templateUrl: "common/badge/badge.html"
  5214. }),
  5215. angular.module("avatar", ["encode.uri.component", "imager", "templates"]).component("habboAvatar", {
  5216. bindings: {
  5217. big: "@",
  5218. user: "@"
  5219. },
  5220. controllerAs: "AvatarController",
  5221. templateUrl: "common/avatar/avatar.html"
  5222. }),
  5223. angular.module("ios.download.link", ["config", "google.analytics"]).directive("habboIosDownloadLink", ["CONFIG", "googleAnalytics", function(e, t) {
  5224. return {
  5225. restrict: "A",
  5226. link: function(o, r, a) {
  5227. bowser.ios && (a.$set("href", e.appStoreUrl),
  5228. a.$set("target", "_blank"),
  5229. r.click(function() {
  5230. t.trackEvent("Download", "App Store")
  5231. }))
  5232. }
  5233. }
  5234. }
  5235. ]),
  5236. angular.module("air.download.link", ["android.download.link", "ios.download.link"]),
  5237. angular.module("android.download.link", ["config", "google.analytics"]).directive("habboAndroidDownloadLink", ["CONFIG", "googleAnalytics", function(e, t) {
  5238. return {
  5239. restrict: "A",
  5240. link: function(o, r, a) {
  5241. bowser.android && (a.$set("href", e.googlePlayUrl),
  5242. a.$set("target", "_blank"),
  5243. r.click(function() {
  5244. t.trackEvent("Download", "Google Play")
  5245. }))
  5246. }
  5247. }
  5248. }
  5249. ]),
  5250. angular.module("ad.unit", ["ad.double.click", "security", "templates"]).component("habboAdUnit", {
  5251. bindings: {
  5252. unit: "@"
  5253. },
  5254. controller: ["$location", "Session", function(e, t) {
  5255. var o = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i
  5256. , r = this;
  5257. r.hasAds = t.hasAds,
  5258. r.isAdsPrevented = function() {
  5259. var t = e.search()
  5260. , r = _(t).values().find(function(e) {
  5261. return o.test(e)
  5262. });
  5263. return Boolean(r)
  5264. }
  5265. }
  5266. ],
  5267. controllerAs: "AdUnitController",
  5268. templateUrl: "common/ad-unit/ad-unit.html"
  5269. }),
  5270. angular.module("accordion", ["accordion.grid", "accordion.item", "accordion.item.content", "accordion.item.preview"]),
  5271. angular.module("accordion.item.preview", []).component("habboAccordionItemPreview", {
  5272. require: {
  5273. AccordionItemController: "^habboAccordionItem"
  5274. },
  5275. controllerAs: "AccordionItemPreviewController",
  5276. template: '<div ng-click="AccordionItemPreviewController.AccordionItemController.toggle()" ng-transclude></div>',
  5277. transclude: !0
  5278. }),
  5279. angular.module("accordion.item.content", ["ngAnimate", "events", "templates"]).component("habboAccordionItemContent", {
  5280. require: {
  5281. AccordionItemController: "^habboAccordionItem"
  5282. },
  5283. controller: ["$animate", "$element", "$scope", "$timeout", "EVENTS", function(e, t, o, r, a) {
  5284. function n() {
  5285. m = u()
  5286. }
  5287. function i() {
  5288. angular.isUndefined(m) && n(),
  5289. c({
  5290. height: 0,
  5291. opacity: 0
  5292. }, {
  5293. height: m,
  5294. opacity: 1
  5295. }),
  5296. p.height = m
  5297. }
  5298. function s() {
  5299. c({
  5300. height: m,
  5301. opacity: 1
  5302. }, {
  5303. height: 0,
  5304. opacity: 0
  5305. }),
  5306. m = void 0,
  5307. p.height = 0
  5308. }
  5309. function l() {
  5310. 0 !== p.height && r(function() {
  5311. var e = u();
  5312. c({
  5313. height: p.height
  5314. }, {
  5315. height: e
  5316. }),
  5317. p.height = e
  5318. })
  5319. }
  5320. function c(t, o) {
  5321. d && e.cancel(d),
  5322. d = e.animate(h, t, o)
  5323. }
  5324. function u() {
  5325. var e = h.css("height", "").actual("outerHeight");
  5326. return h.css("height", p.height),
  5327. e
  5328. }
  5329. var d, m, p = this, h = t.children().first();
  5330. p.height = 0,
  5331. o.$on(a.accordionOpen, i),
  5332. o.$on(a.accordionClose, s),
  5333. o.$on(a.accordionResize, function() {
  5334. n(),
  5335. l()
  5336. }),
  5337. o.$on(a.accordionUpdate, l),
  5338. o.$watch("AccordionItemContentController.height", function(e) {
  5339. p.AccordionItemController.setContentHeight(e)
  5340. })
  5341. }
  5342. ],
  5343. controllerAs: "AccordionItemContentController",
  5344. templateUrl: "common/accordion/accordion-item-content.html",
  5345. transclude: !0
  5346. }),
  5347. angular.module("accordion.item", ["events", "templates"]).component("habboAccordionItem", {
  5348. require: {
  5349. AccordionGridController: "^habboAccordionGrid"
  5350. },
  5351. controller: ["$element", "$scope", "EVENTS", function(e, t, o) {
  5352. var r = this;
  5353. r.expanded = !1,
  5354. r.contentHeight = 0,
  5355. r.offset = 0,
  5356. r.$onInit = function() {
  5357. r.AccordionGridController.registerItem(r)
  5358. }
  5359. ,
  5360. r.toggle = function() {
  5361. r.expanded ? r.AccordionGridController.collapseItem(r) : (r.offset = e.offset().top,
  5362. r.AccordionGridController.expandItem(r))
  5363. }
  5364. ,
  5365. r.setContentHeight = function(e) {
  5366. r.contentHeight = e
  5367. }
  5368. ,
  5369. t.$watch("AccordionItemController.expanded", function(e, r) {
  5370. e ? t.$broadcast(o.accordionOpen) : r && t.$broadcast(o.accordionClose)
  5371. })
  5372. }
  5373. ],
  5374. controllerAs: "AccordionItemController",
  5375. templateUrl: "common/accordion/accordion-item.html",
  5376. transclude: !0
  5377. }),
  5378. angular.module("accordion.grid", ["events"]).component("habboAccordionGrid", {
  5379. controller: ["$scope", "$window", "EVENTS", function(e, t, o) {
  5380. function r() {
  5381. angular.forEach(l, s.collapseItem)
  5382. }
  5383. function a(e, t) {
  5384. return t && parseInt(t.offset, 10) < parseInt(e.offset, 10) ? e.offset - t.contentHeight : e.offset
  5385. }
  5386. function n() {
  5387. e.$broadcast(o.accordionResize)
  5388. }
  5389. var i = 150
  5390. , s = this
  5391. , l = [];
  5392. s.expandedItem = null ,
  5393. s.registerItem = function(e) {
  5394. l.push(e)
  5395. }
  5396. ,
  5397. s.expandItem = function(e) {
  5398. r(),
  5399. e.expanded = !0,
  5400. s.expandedItem = e
  5401. }
  5402. ,
  5403. s.collapseItem = function(e) {
  5404. e.expanded && (e.expanded = !1,
  5405. s.expandedItem = null )
  5406. }
  5407. ,
  5408. angular.element(t).on("orientationchange resize", n),
  5409. e.$on("$destroy", function() {
  5410. angular.element(t).off("orientationchange resize", n)
  5411. }),
  5412. e.$watch("HabboAccordionGridController.expandedItem", function(e, t) {
  5413. if (e) {
  5414. var o = a(e, t);
  5415. angular.element("html, body").animate({
  5416. scrollTop: o
  5417. }, i)
  5418. }
  5419. })
  5420. }
  5421. ],
  5422. controllerAs: "HabboAccordionGridController",
  5423. template: "<ul ng-transclude></ul>",
  5424. transclude: !0
  5425. }),
  5426. angular.module("shop", ["config", "earn.credits", "header", "locale", "prepaid", "router", "shop.footer", "store", "subscriptions", "system.data", "tabs", "templates", "transactions"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  5427. e.statePublic("shop", {
  5428. url: "/shop?country",
  5429. "abstract": !0,
  5430. controller: "ShopController",
  5431. controllerAs: "ShopController",
  5432. resolve: {
  5433. countryCode: ["$stateParams", "SystemData", function(e, t) {
  5434. return e.country || t.getShopCountry() || "all"
  5435. }
  5436. ]
  5437. },
  5438. templateUrl: "shop/shop.html"
  5439. }),
  5440. t.when("/credits", "/shop")
  5441. }
  5442. ]).controller("ShopController", ["CONFIG", function(e) {
  5443. var t = this;
  5444. t.earnCreditsEnabled = "true" === e.offerToroEnabled
  5445. }
  5446. ]),
  5447. angular.module("shop.filters", []).filter("credit", function() {
  5448. return function(e) {
  5449. return _.filter(e, function(e) {
  5450. return e.creditAmount > 0
  5451. })
  5452. }
  5453. }).filter("product", function() {
  5454. return function(e) {
  5455. return _.filter(e, function(e) {
  5456. return 0 === e.creditAmount
  5457. })
  5458. }
  5459. }).filter("paymentCategory", function() {
  5460. return function(e, t) {
  5461. return t ? _.filter(e, function(e) {
  5462. return e.category === t
  5463. }) : e
  5464. }
  5465. }).filter("payment", ["paymentCategoryFilter", function(e) {
  5466. return function(t, o) {
  5467. return _.filter(t, function(t) {
  5468. return e(t.paymentMethods, o).length > 0
  5469. })
  5470. }
  5471. }
  5472. ]),
  5473. angular.module("shop.service", ["ngResource", "config", "safe.transform.response", "security", "storage"]).factory("Shop", ["$resource", "CONFIG", "Session", "httpCache", "safeTransformResponse", function(e, t, o, r, a) {
  5474. function n(e) {
  5475. return e = e || [],
  5476. 1 === e.length ? [] : (e.unshift("all"),
  5477. _.map(e, function(e) {
  5478. return {
  5479. key: e,
  5480. translateKey: "SHOP_PAYMENT_METHOD_" + e.toUpperCase()
  5481. }
  5482. }))
  5483. }
  5484. var i = e(t.shopUrl + "/:resource/:subresource", {}, {
  5485. countries: {
  5486. url: t.shopUrl + "/:public/:subresource",
  5487. method: "GET",
  5488. isArray: !0,
  5489. params: {
  5490. subresource: "countries"
  5491. },
  5492. cache: r.longCache
  5493. },
  5494. inventory: {
  5495. url: t.shopUrl + "/:public/inventory/:countryCode",
  5496. method: "GET",
  5497. cache: r.longCache,
  5498. transformResponse: a.fromJson(function(e) {
  5499. return e.paymentCategories = n(e.paymentCategories),
  5500. e
  5501. })
  5502. },
  5503. history: {
  5504. url: t.shopUrl + "/history",
  5505. method: "GET",
  5506. isArray: !0
  5507. }
  5508. })
  5509. , s = i.inventory
  5510. , l = i.countries;
  5511. return i.inventory = function() {
  5512. return arguments[0] = arguments[0] || {},
  5513. _.extend(arguments[0], {
  5514. "public": o.hasSession() ? null : "public"
  5515. }),
  5516. s.apply(this, arguments)
  5517. }
  5518. ,
  5519. i.countries = function() {
  5520. return l.apply(this, [{
  5521. "public": o.hasSession() ? null : "public"
  5522. }])
  5523. }
  5524. ,
  5525. i
  5526. }
  5527. ]),
  5528. angular.module("settings.service", ["config", "google.analytics"]).factory("settings", ["$http", "CONFIG", "googleAnalytics", function(e, t, o) {
  5529. var r = {};
  5530. return r.changePassword = function(r) {
  5531. return e.post(t.apiUrl + "/settings/password/change", r).then(function(e) {
  5532. return o.trackEvent("Password", "Changed"),
  5533. e
  5534. })
  5535. }
  5536. ,
  5537. r.changeEmail = function(r) {
  5538. return e.post(t.apiUrl + "/settings/email/change", r).then(function(e) {
  5539. return o.trackEvent("Email", "Changed"),
  5540. e
  5541. })
  5542. }
  5543. ,
  5544. r.resendActivationEmail = function() {
  5545. return e.post(t.apiUrl + "/settings/email/verification-resend").then(function(e) {
  5546. return o.trackEvent("Email", "Activation resent"),
  5547. e
  5548. })
  5549. }
  5550. ,
  5551. r
  5552. }
  5553. ]),
  5554. angular.module("settings", ["account.security", "avatar.selection", "email.change", "header", "locale", "password.change", "privacy.settings", "router", "security", "tabs", "templates", "web.pages"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  5555. e.statePrivate("settings", {
  5556. url: "/settings",
  5557. "abstract": !0,
  5558. templateUrl: "settings/settings.html"
  5559. }),
  5560. t.when("/settings", "/settings/privacy")
  5561. }
  5562. ]),
  5563. angular.module("security.service", ["config", "google.analytics", "security.fb", "security.session", "security.use.force.service"]).factory("security", ["$http", "$location", "$q", "$window", "CONFIG", "Session", "fbSecurity", "googleAnalytics", "useForce", function(e, t, o, r, a, n, i, s, l) {
  5564. function c(e) {
  5565. return l.handleForces(e)["catch"](function() {
  5566. return u()["finally"](function() {
  5567. return o.reject({
  5568. status: "force.pending"
  5569. })
  5570. })
  5571. })
  5572. }
  5573. function u() {
  5574. return e.post(a.apiUrl + "/public/authentication/logout")
  5575. }
  5576. function d(e) {
  5577. return n.destroy(),
  5578. r.location.href = e || "/",
  5579. o.defer().promise
  5580. }
  5581. var m = {};
  5582. return m.init = function(e) {
  5583. var t = e || r.session;
  5584. return c(t).then(n.init)
  5585. }
  5586. ,
  5587. m.login = function(o) {
  5588. return e.post(a.apiUrl + "/public/authentication/login", o).then(function(e) {
  5589. return s.trackEvent("Login", "Credentials", t.path()),
  5590. e.data
  5591. }).then(c).then(n.create)
  5592. }
  5593. ,
  5594. m.fbLogin = function() {
  5595. return i.login().then(function(o) {
  5596. return e.post(a.apiUrl + "/public/authentication/facebook", o).then(function(e) {
  5597. return s.trackEvent("Login", "Facebook", t.path()),
  5598. e.data
  5599. }).then(c).then(n.create)
  5600. })
  5601. }
  5602. ,
  5603. m.logout = function(e) {
  5604. return u().then(function() {
  5605. return s.trackEvent("Logout", "Succeeded", t.path()),
  5606. d(e)
  5607. })["catch"](function() {
  5608. return s.trackEvent("Logout", "Failed", t.path()),
  5609. o.reject()
  5610. })
  5611. }
  5612. ,
  5613. m.forceLogout = function(e) {
  5614. return u()["finally"](function() {
  5615. return s.trackEvent("Logout", "Forced", t.path()),
  5616. d(e)
  5617. })
  5618. }
  5619. ,
  5620. m
  5621. }
  5622. ]),
  5623. angular.module("security", ["security.authorization", "security.credentials", "security.fingerprint", "security.login", "security.safety.answering.modal", "security.safety.lock", "security.service", "security.session"]),
  5624. angular.module("security.fb", ["ezfb"]).factory("fbSecurity", ["$q", "ezfb", function(e, t) {
  5625. function o() {
  5626. var o = e.defer();
  5627. return t.getLoginStatus(function(e) {
  5628. "connected" === e.status ? o.resolve(e.authResponse) : o.reject(e)
  5629. }),
  5630. o.promise
  5631. }
  5632. function r() {
  5633. var o = e.defer();
  5634. return t.login(function(e) {
  5635. "connected" === e.status ? o.resolve(e.authResponse) : o.reject(e)
  5636. }, {
  5637. scope: "public_profile,email"
  5638. }),
  5639. o.promise
  5640. }
  5641. var a = {};
  5642. return a.login = function() {
  5643. return t.isSdkLoaded() ? o()["catch"](r) : e.reject({
  5644. data: {
  5645. message: "fb.sdk_not_loaded"
  5646. }
  5647. })
  5648. }
  5649. ,
  5650. a
  5651. }
  5652. ]),
  5653. angular.module("security.credentials", ["config"]).factory("credentials", ["CONFIG", function(e) {
  5654. var t = {};
  5655. return t.request = function(t) {
  5656. return (_(t.url).includes(e.apiUrl) || _(t.url).includes(e.extraDataUrl) || _(t.url).includes(e.shopUrl)) && (t.withCredentials = !0),
  5657. t
  5658. }
  5659. ,
  5660. t
  5661. }
  5662. ]).config(["$httpProvider", function(e) {
  5663. e.interceptors.push("credentials")
  5664. }
  5665. ]),
  5666. angular.module("security.authorization", ["security.login", "security.safety.lock", "security.session"]).factory("authorization", ["$q", "Session", "loginModal", "safetyLockModal", function(e, t, o, r) {
  5667. var a = {};
  5668. return a.hasAccessToPrivate = function() {
  5669. return t.hasSession() ? e.when() : o.open()["catch"](function() {
  5670. return e.reject({
  5671. access: !1
  5672. })
  5673. })
  5674. }
  5675. ,
  5676. a.hasAccessToTrusted = function() {
  5677. return a.hasAccessToPrivate().then(function() {
  5678. return t.isTrusted() ? e.when() : r.open()["catch"](function() {
  5679. return e.reject({
  5680. access: !1
  5681. })
  5682. })
  5683. })
  5684. }
  5685. ,
  5686. a.hasAccessToHabboAccountTrusted = function() {
  5687. return a.hasAccessToTrusted().then(function() {
  5688. return t.isHabboAccountSession() ? e.when() : e.reject({
  5689. access: !1
  5690. })
  5691. })
  5692. }
  5693. ,
  5694. a
  5695. }
  5696. ]),
  5697. angular.module("router.service", ["security", "ui.router"]).config(["$locationProvider", "$urlMatcherFactoryProvider", function(e, t) {
  5698. e.hashPrefix("!"),
  5699. e.html5Mode({
  5700. enabled: !0,
  5701. requireBase: !1
  5702. }),
  5703. t.strictMode(!1)
  5704. }
  5705. ]).config(["$stateProvider", function(e) {
  5706. function t(e, t, l) {
  5707. return t["abstract"] !== !0 && (o("auth", t),
  5708. t.resolve.auth = ["$injector", function(e) {
  5709. return a = a || e.get("$q"),
  5710. n = n || e.get("$state"),
  5711. i = i || e.get("authorization"),
  5712. i[l]()["catch"](r)
  5713. }
  5714. ]),
  5715. s(e, t)
  5716. }
  5717. function o(e, t) {
  5718. t.resolve = t.resolve || {},
  5719. _(t.resolve).keys().forEach(function(o) {
  5720. _(t.resolve[o]).includes(e) || t.resolve[o].splice(t.resolve[o].length - 1, 0, e)
  5721. })
  5722. }
  5723. function r(e) {
  5724. return n.hasPrevious() || n.go("home.news"),
  5725. a.reject(e)
  5726. }
  5727. var a, n, i, s = e.state;
  5728. e.statePublic = function(e, t) {
  5729. return s(e, t)
  5730. }
  5731. ,
  5732. e.statePrivate = function(e, o) {
  5733. return t(e, o, "hasAccessToPrivate")
  5734. }
  5735. ,
  5736. e.state = function(e, o) {
  5737. return t(e, o, "hasAccessToTrusted")
  5738. }
  5739. ,
  5740. e.stateHabboAccountTrusted = function(e, o) {
  5741. return t(e, o, "hasAccessToHabboAccountTrusted")
  5742. }
  5743. }
  5744. ]).run(["$rootScope", "$state", "security", function(e, t, o) {
  5745. var r = e.$on("$stateChangeStart", function(e, a, n) {
  5746. e.preventDefault(),
  5747. o.init()["finally"](function() {
  5748. r(),
  5749. t.go(a, n)
  5750. })
  5751. })
  5752. }
  5753. ]),
  5754. angular.module("refresh.dosarrest.cookie", []).factory("refreshDosarrestCookie", ["$q", "$window", function(e, t) {
  5755. function o(e) {
  5756. return e.match(/\.html$/)
  5757. }
  5758. function r(e) {
  5759. return _.isString(e) && a.test(e)
  5760. }
  5761. var a = /<title>Client Validation<\/title>/gi
  5762. , n = {};
  5763. return n.response = function(a) {
  5764. var n = e.defer();
  5765. return !o(a.config.url) && r(a.data) ? t.location.reload() : n.resolve(a),
  5766. n.promise
  5767. }
  5768. ,
  5769. n
  5770. }
  5771. ]).config(["$httpProvider", function(e) {
  5772. e.interceptors.push("refreshDosarrestCookie")
  5773. }
  5774. ]),
  5775. angular.module("prompt.safety.lock", ["http.buffer", "security"]).factory("promptSafetyLock", ["$injector", "$q", "httpBuffer", function(e, t, o) {
  5776. function r(e) {
  5777. return e.data && "account.safety_locked" === e.data.error
  5778. }
  5779. function a(e) {
  5780. return _(e).includes("/public/forgotPassword")
  5781. }
  5782. function n(e) {
  5783. var r = t.defer();
  5784. return o.pushError(e.config, r),
  5785. i().open().then(o.flush)["catch"](function() {
  5786. o.reject(403)
  5787. }),
  5788. r.promise
  5789. }
  5790. function i() {
  5791. return s || e.get("safetyLockModal")
  5792. }
  5793. var s, l = {};
  5794. return l.responseError = function(e) {
  5795. return e && r(e) && !a(e.config.url) ? n(e) : t.reject(e)
  5796. }
  5797. ,
  5798. l
  5799. }
  5800. ]).config(["$httpProvider", function(e) {
  5801. e.interceptors.push("promptSafetyLock")
  5802. }
  5803. ]),
  5804. angular.module("prompt.login", ["http.buffer", "security"]).factory("promptLogin", ["$injector", "$location", "$q", "Session", "httpBuffer", function(e, t, o, r, a) {
  5805. function n(e) {
  5806. return _(e).includes("/login") || _(e).includes("/facebook") || _(e).includes("/logout")
  5807. }
  5808. function i() {
  5809. return u || e.get("security")
  5810. }
  5811. function s(e) {
  5812. var t = o.defer()
  5813. , r = l();
  5814. return a.pushError(e.config, t),
  5815. r.isOpen() || r.open().then(a.flush)["catch"](function() {
  5816. a.reject(401)
  5817. }),
  5818. t.promise
  5819. }
  5820. function l() {
  5821. return c || e.get("loginModal")
  5822. }
  5823. var c, u, d = {};
  5824. return d.responseError = function(e) {
  5825. return e && 401 === e.status && !n(e.config.url) ? r.hasSession() ? i().forceLogout(t.url()) : s(e) : o.reject(e)
  5826. }
  5827. ,
  5828. d
  5829. }
  5830. ]).config(["$httpProvider", function(e) {
  5831. e.interceptors.push("promptLogin")
  5832. }
  5833. ]),
  5834. angular.module("error.maintenance", ["notifier"]).factory("maintenanceError", ["$q", "notifier", function(e, t) {
  5835. var o = {};
  5836. return o.responseError = function(o) {
  5837. return 503 === o.status && t.error("ERROR_SERVER_MAINTENANCE"),
  5838. e.reject(o)
  5839. }
  5840. ,
  5841. o
  5842. }
  5843. ]).config(["$httpProvider", function(e) {
  5844. e.interceptors.push("maintenanceError")
  5845. }
  5846. ]),
  5847. angular.module("router", ["ban.error", "error.maintenance", "head", "prerender", "prompt.login", "prompt.safety.lock", "refresh.dosarrest.cookie", "router.service", "scrolltop", "spinner"]),
  5848. angular.module("http.buffer", []).factory("httpBuffer", ["$injector", function(e) {
  5849. function t(t, r) {
  5850. o = o || e.get("$http"),
  5851. o(t).then(function(e) {
  5852. r.resolve(e)
  5853. })["catch"](function(e) {
  5854. r.reject(e)
  5855. })
  5856. }
  5857. var o, r = {}, a = [];
  5858. return r.pushError = function(e, t) {
  5859. a.push({
  5860. config: e,
  5861. deferred: t
  5862. })
  5863. }
  5864. ,
  5865. r.flush = function() {
  5866. angular.forEach(a, function(e) {
  5867. t(e.config, e.deferred)
  5868. }),
  5869. a = []
  5870. }
  5871. ,
  5872. r.reject = function(e) {
  5873. angular.forEach(a, function(t) {
  5874. t.deferred.reject({
  5875. status: e,
  5876. data: {}
  5877. })
  5878. }),
  5879. a = []
  5880. }
  5881. ,
  5882. r
  5883. }
  5884. ]),
  5885. angular.module("room", ["flash", "locale", "remove.on.error", "room.open", "room.restricted", "room.service", "router", "templates"]).config(["$stateProvider", function(e) {
  5886. e.statePublic("room", {
  5887. url: "/room/:id",
  5888. controller: "RoomController",
  5889. controllerAs: "RoomController",
  5890. onEnter: ["room", "Head", function(e, t) {
  5891. function o(e) {
  5892. return e.replace(/[|ƒ†‡‘•—¥ª¬±µ¶º»]/g, " ").replace(/[ ]+/g, " ").trim()
  5893. }
  5894. t.title = o(e.name)
  5895. }
  5896. ],
  5897. resolve: {
  5898. room: ["$stateParams", "Room", function(e, t) {
  5899. return t.get({
  5900. id: e.id
  5901. }).$promise
  5902. }
  5903. ]
  5904. },
  5905. templateUrl: "room/room.html"
  5906. })
  5907. }
  5908. ]).controller("RoomController", ["room", function(e) {
  5909. var t = this;
  5910. t.room = e
  5911. }
  5912. ]),
  5913. angular.module("room.service", ["ngResource", "config", "storage"]).factory("Room", ["$resource", "CONFIG", "httpCache", function(e, t, o) {
  5914. return e(t.apiUrl + "/public/rooms/:id", null , {
  5915. get: {
  5916. method: "GET",
  5917. cache: o.shortCache
  5918. }
  5919. })
  5920. }
  5921. ]),
  5922. angular.module("registration.service", ["config", "google.analytics", "registration.age.gate", "security"]).factory("registration", ["$http", "$q", "$window", "CONFIG", "ageGate", "googleAnalytics", "security", function(e, t, o, r, a, n, i) {
  5923. var s = {};
  5924. return s.register = function(s) {
  5925. return a.register(s.birthdate),
  5926. a.isLocked() ? t.reject({
  5927. data: {
  5928. error: "age"
  5929. }
  5930. }) : e.post(r.apiUrl + "/public/registration/new", s).then(function(e) {
  5931. var r = t.defer();
  5932. return 204 === e.status ? (n.trackEvent("Registration", "Registered", "Staff"),
  5933. r.resolve(e)) : (n.trackEvent("Registration", "Registered", "User"),
  5934. o.piwikTrack && (o._spef.push(["trackGoal", 1]),
  5935. o.piwikTrack()),
  5936. i.init(e.data).then(function() {
  5937. r.resolve(e)
  5938. })),
  5939. r.promise
  5940. })
  5941. }
  5942. ,
  5943. s
  5944. }
  5945. ]),
  5946. angular.module("registration", ["events", "header", "hotel.closed", "locale", "registration.form", "router", "security", "system.data", "templates"]).config(["$stateProvider", function(e) {
  5947. e.statePublic("registration", {
  5948. url: "/registration?captchaToken",
  5949. controller: "RegistrationController",
  5950. controllerAs: "RegistrationController",
  5951. data: {
  5952. title: "HEAD_TITLE_REGISTRATION"
  5953. },
  5954. templateUrl: "registration/registration.html"
  5955. })
  5956. }
  5957. ]).controller("RegistrationController", ["$scope", "$state", "EVENTS", "SystemData", function(e, t, o, r) {
  5958. var a = this;
  5959. a.isOpen = r.isHotelOpen(),
  5960. e.$on(o.securityLogin, function() {
  5961. t.go("home.news", null , {
  5962. location: "replace"
  5963. })
  5964. })
  5965. }
  5966. ]).run(["$rootScope", "$state", "Session", function(e, t, o) {
  5967. e.$on("$stateChangeStart", function(e, r) {
  5968. "registration" === r.name && (o.hasSession() || bowser.android || bowser.ios) && (e.preventDefault(),
  5969. t.go("home.news"))
  5970. })
  5971. }
  5972. ]),
  5973. angular.module("registration.form", ["ngMessages", "birthdate", "config", "form", "google.analytics", "locale", "notifier", "registration.partner", "registration.policies", "registration.service", "router", "security", "system.data", "templates"]).component("habboRegistrationForm", {
  5974. controller: ["$scope", "$state", "$stateParams", "CAPTCHA_EVENTS", "CONFIG", "SystemData", "googleAnalytics", "notifier", "registration", function(e, t, o, r, a, n, i, s, l) {
  5975. function c() {
  5976. return "hhtr" === a.hotel
  5977. }
  5978. var u = this;
  5979. u.hasCaptchaToken = Boolean(o.captchaToken),
  5980. u.registration = {
  5981. captchaToken: o.captchaToken
  5982. },
  5983. u.registerInProgress = !1,
  5984. u.showPartnerRegistration = n.isIDCGamesCountry() || c(),
  5985. u.register = function() {
  5986. var o = _(e.registrationForm.$error).values().flatten().map("$name").uniq().sort().join(", ");
  5987. i.trackEvent("Registration", "Clicked", o),
  5988. e.registrationForm.$valid && (u.registerInProgress = !0,
  5989. l.register(u.registration).then(function(e) {
  5990. 204 === e.status ? t.go("home.news") : t.go("hotel")
  5991. })["catch"](function(t) {
  5992. var o = t.data && t.data.error;
  5993. "age" === o ? s.error("ERROR_BIRTHDATE_AGE") : ("registration_email" === o ? e.$broadcast("remote-data-invalid", "emailInvalid") : "registration_email_in_use" === o ? e.$broadcast("remote-data-invalid", "emailUsedInRegistration") : 429 === t.status ? s.error("ERROR_TOO_MANY_ATTEMPTS", {
  5994. time: moment(t.data.nextValidRequestDate).fromNow(!0)
  5995. }) : s.error("ERROR_SERVER"),
  5996. e.$broadcast(r.reset))
  5997. })["finally"](function() {
  5998. u.registerInProgress = !1
  5999. }))
  6000. }
  6001. ,
  6002. u.fbRegister = function() {
  6003. t.go("hotel")
  6004. }
  6005. }
  6006. ],
  6007. controllerAs: "RegistrationFormController",
  6008. templateUrl: "registration/registration-form.html"
  6009. }),
  6010. angular.module("registration.age.gate", ["config", "google.analytics", "local.storage"]).factory("ageGate", ["CONFIG", "googleAnalytics", "localStorage", function(e, t, o) {
  6011. function r(t) {
  6012. return moment({
  6013. day: t.day,
  6014. month: t.month - 1,
  6015. year: t.year
  6016. }).add(e.minAge, "years").isAfter(moment())
  6017. }
  6018. var a = {}
  6019. , n = !1;
  6020. return a.register = function(e) {
  6021. r(e) && (n = !0,
  6022. o.set("ageGate", !0),
  6023. t.trackEvent("Registration", "Age gate", moment(e).format("YYYY-MM-DD")))
  6024. }
  6025. ,
  6026. a.isLocked = function() {
  6027. return n || o.get("ageGate")
  6028. }
  6029. ,
  6030. a
  6031. }
  6032. ]),
  6033. angular.module("profile", ["header", "locale", "profile.creations", "profile.header", "profile.item.lists", "profile.modal", "profile.service", "router", "security", "social.share", "templates"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  6034. e.statePublic("profile", {
  6035. url: "/profile/:name",
  6036. controller: "ProfileController",
  6037. controllerAs: "ProfileController",
  6038. data: {
  6039. title: "HEAD_TITLE_PROFILE"
  6040. },
  6041. resolve: {
  6042. profile: ["$stateParams", "Profile", function(e, t) {
  6043. return t.get({
  6044. name: e.name
  6045. }).$promise
  6046. }
  6047. ]
  6048. },
  6049. templateUrl: "profile/profile.html"
  6050. }),
  6051. t.when("/home/:name", "/profile/:name"),
  6052. t.when("/profile", "/")
  6053. }
  6054. ]).controller("ProfileController", ["CreationsProfile", "Profile", "Session", "profile", function(e, t, o, r) {
  6055. var a = this;
  6056. a.profile = r,
  6057. o.hasSession() && r.uniqueId === o.user.uniqueId ? a.items = t["private"]() : r.profileVisible && (a.items = t.items({
  6058. uniqueId: r.uniqueId
  6059. })),
  6060. a.stories = e.stories({
  6061. uniqueId: r.uniqueId
  6062. }),
  6063. a.photos = e.photos({
  6064. uniqueId: r.uniqueId
  6065. }),
  6066. a.random = function() {
  6067. return .5 - Math.random()
  6068. }
  6069. }
  6070. ]),
  6071. angular.module("profile.service", ["ngResource", "config", "storage"]).factory("Profile", ["$resource", "CONFIG", "httpCache", function(e, t, o) {
  6072. return e(t.apiUrl + "/public/users/:uniqueId/:resource", null , {
  6073. get: {
  6074. method: "GET",
  6075. cache: o.shortCache
  6076. },
  6077. items: {
  6078. method: "GET",
  6079. params: {
  6080. resource: "profile"
  6081. },
  6082. cache: o.shortCache
  6083. },
  6084. "private": {
  6085. method: "GET",
  6086. url: t.apiUrl + "/user/profile",
  6087. cache: o.shortCache
  6088. }
  6089. })
  6090. }
  6091. ]),
  6092. angular.module("profile.creations", ["ngResource", "config", "profile.service", "reported.photos", "safe.transform.response", "storage"]).factory("CreationsProfile", ["$resource", "CONFIG", "Profile", "httpCache", "reportedPhotosFilter", "safeTransformResponse", function(e, t, o, r, a, n) {
  6093. function i(e) {
  6094. return function(t) {
  6095. return o.get({
  6096. name: t
  6097. }).$promise.then(function(t) {
  6098. return s[e]({
  6099. uniqueId: t.uniqueId
  6100. }).$promise
  6101. })
  6102. }
  6103. }
  6104. var s = e(t.extraDataUrl + "/public/users/:uniqueId/:resource", null , {
  6105. photos: {
  6106. method: "GET",
  6107. isArray: !0,
  6108. params: {
  6109. resource: "photos"
  6110. },
  6111. cache: r.shortCache,
  6112. transformResponse: n.fromJson(function(e) {
  6113. var t = a(e);
  6114. return _.map(t, function(e) {
  6115. return _.assign(e, {
  6116. url: "https:" + e.url,
  6117. contentHeight: 320,
  6118. contentWidth: 320,
  6119. parentTitle: "PHOTOS_TITLE"
  6120. })
  6121. })
  6122. })
  6123. },
  6124. stories: {
  6125. method: "GET",
  6126. isArray: !0,
  6127. params: {
  6128. resource: "stories"
  6129. },
  6130. cache: r.shortCache,
  6131. transformResponse: n.fromJson(function(e) {
  6132. return _.map(e, function(e) {
  6133. return e.url && -1 === e.url.indexOf("https:") && (e.url = "https:" + e.url),
  6134. e
  6135. })
  6136. })
  6137. }
  6138. });
  6139. return s.photosForUser = i("photos"),
  6140. s.storiesForUser = i("stories"),
  6141. s
  6142. }
  6143. ]),
  6144. angular.module("playing.habbo", ["ad.unit", "header", "locale", "router", "tabs", "templates", "web.pages"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  6145. var o = ["what-is-habbo", "how-to-play", "habbo-way", "safety", "help"];
  6146. e.statePublic("playingHabbo", {
  6147. url: "/playing-habbo",
  6148. templateUrl: "playing-habbo/playing-habbo.html",
  6149. "abstract": !0
  6150. }),
  6151. _.forEach(o, function(t) {
  6152. var o = "HEAD_TITLE_PLAYING_HABBO_" + t.toUpperCase().replace(/-/g, "_");
  6153. e.statePublic("playingHabbo." + t, {
  6154. url: "/" + t,
  6155. controller: "PlayingHabboController",
  6156. controllerAs: "PlayingHabboController",
  6157. data: {
  6158. title: o
  6159. },
  6160. resolve: {
  6161. page: ["webPages", function(e) {
  6162. return e.get("playing_habbo/" + _.snakeCase(t))
  6163. }
  6164. ]
  6165. },
  6166. templateUrl: "playing-habbo/" + t + ".html"
  6167. })
  6168. }),
  6169. t.when("/playing-habbo", "/playing-habbo/what-is-habbo")
  6170. }
  6171. ]).controller("PlayingHabboController", ["page", function(e) {
  6172. var t = this;
  6173. t.page = e
  6174. }
  6175. ]),
  6176. angular.module("password.reset.service", ["config", "google.analytics"]).factory("passwordReset", ["$http", "CONFIG", "googleAnalytics", function(e, t, o) {
  6177. var r = {};
  6178. return r.send = function(r) {
  6179. return e.post(t.apiUrl + "/public/forgotPassword/send", {
  6180. email: r
  6181. }).then(function(e) {
  6182. return o.trackEvent("Password", "Reset requested"),
  6183. e
  6184. })
  6185. }
  6186. ,
  6187. r.changePassword = function(r) {
  6188. return e.post(t.apiUrl + "/public/forgotPassword/changePassword", r).then(function(e) {
  6189. return o.trackEvent("Password", "Password reset"),
  6190. e
  6191. })
  6192. }
  6193. ,
  6194. r
  6195. }
  6196. ]),
  6197. angular.module("password.reset", ["header", "locale", "password.reset.form", "router", "security", "templates"]).config(["$stateProvider", function(e) {
  6198. e.statePublic("resetPassword", {
  6199. url: "/reset-password/:token",
  6200. controller: "PasswordResetController",
  6201. controllerAs: "PasswordResetController",
  6202. data: {
  6203. title: "HEAD_TITLE_PASSWORD_RESET"
  6204. },
  6205. onEnter: ["$location", "security", "Session", function(e, t, o) {
  6206. return o.hasSession() ? t.forceLogout(e.url()) : void 0
  6207. }
  6208. ],
  6209. templateUrl: "password-reset/password-reset.html"
  6210. })
  6211. }
  6212. ]).controller("PasswordResetController", ["$stateParams", function(e) {
  6213. var t = this;
  6214. t.token = e.token
  6215. }
  6216. ]),
  6217. angular.module("password.reset.form", ["form", "locale", "notifier", "password.reset.service", "router", "security", "templates"]).component("habboPasswordResetForm", {
  6218. bindings: {
  6219. token: "<"
  6220. },
  6221. controller: ["$scope", "$state", "notifier", "passwordReset", "safetyAnsweringModal", function(e, t, o, r, a) {
  6222. function n() {
  6223. o.success("PASSWORD_RESET_SUCCESS"),
  6224. t.go("home.news")
  6225. }
  6226. var i = this;
  6227. i.passwords = {},
  6228. i.updateInProgress = !1,
  6229. i.update = function() {
  6230. if (e.resetPasswordForm.$valid) {
  6231. i.updateInProgress = !0;
  6232. var t = {
  6233. token: i.token,
  6234. password: i.passwords.password
  6235. };
  6236. r.changePassword(t).then(n)["catch"](function(i) {
  6237. var s = i.data && i.data.error;
  6238. return 403 === i.status && "account.safety_locked" === s ? a.open(i.data.questions, t, r.changePassword).then(n) : void (404 === i.status ? o.error("ERROR_PASSWORD_RESET_EXPIRED") : "password.too_similar_to_username" === s ? e.$broadcast("remote-data-invalid", "passwordName") : "password.too_similar_to_email" === s ? e.$broadcast("remote-data-invalid", "passwordEmail") : o.error("ERROR_SERVER"))
  6239. })["finally"](function() {
  6240. i.updateInProgress = !1
  6241. })
  6242. }
  6243. }
  6244. }
  6245. ],
  6246. controllerAs: "PasswordResetFormController",
  6247. templateUrl: "password-reset/password-reset-form.html"
  6248. }),
  6249. angular.module("not.found", ["google.analytics", "header", "locale", "router", "templates"]).config(["$stateProvider", function(e) {
  6250. e.statePublic("notFound", {
  6251. templateUrl: "not-found/not-found.html",
  6252. data: {
  6253. title: "HEAD_TITLE_NOT_FOUND"
  6254. }
  6255. })
  6256. }
  6257. ]).config(["$urlRouterProvider", function(e) {
  6258. e.otherwise(function(e, t) {
  6259. var o = e.get("googleAnalytics")
  6260. , r = e.get("$state");
  6261. o.trackEvent("Error", "Not found", t.url()),
  6262. r.go("notFound")
  6263. })
  6264. }
  6265. ]).run(["$location", "$log", "$rootScope", "$state", "googleAnalytics", function(e, t, o, r, a) {
  6266. o.$on("$stateChangeError", function(o, n, i, s, l, c) {
  6267. c && c.access === !1 || (o.preventDefault(),
  6268. t.error(c),
  6269. a.trackEvent("Error", "Not found", e.url()),
  6270. r.go("notFound"))
  6271. })
  6272. }
  6273. ]),
  6274. angular.module("logout", ["locale", "notifier", "router", "security"]).config(["$stateProvider", function(e) {
  6275. e.statePublic("logout", {
  6276. url: "/logout",
  6277. resolve: {
  6278. logout: ["$state", "notifier", "security", function(e, t, o) {
  6279. return o.logout()["catch"](function() {
  6280. e.go("home.news"),
  6281. t.errorSticky("ERROR_LOGOUT_TITLE", "ERROR_LOGOUT_TEXT")
  6282. })
  6283. }
  6284. ]
  6285. }
  6286. })
  6287. }
  6288. ]),
  6289. angular.module("hotel", ["client", "events", "locale", "router", "security", "templates"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  6290. e.statePrivate("hotel", {
  6291. url: "/hotel?link&room",
  6292. controller: "HotelController",
  6293. data: {
  6294. title: "HEAD_TITLE_HOTEL"
  6295. },
  6296. template: '<div class="hotel"></div>'
  6297. }),
  6298. t.when("/client", "/hotel")
  6299. }
  6300. ]).controller("HotelController", ["$rootScope", "$stateParams", "$timeout", "EVENTS", "Session", "safetyLockModal", function(e, t, o, r, a, n) {
  6301. a.isTrusted() || n.open(),
  6302. o(function() {
  6303. e.$broadcast(r.clientOpen, t)
  6304. })
  6305. }
  6306. ]),
  6307. angular.module("home", ["header", "locale", "messaging", "news", "register.banner", "router", "tabs", "templates"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  6308. e.statePublic("home", {
  6309. url: "?captchaToken",
  6310. "abstract": !0,
  6311. controller: "HomeController",
  6312. controllerAs: "HomeController",
  6313. templateUrl: "home/home.html"
  6314. }),
  6315. t.when("/login_popup", "/")
  6316. }
  6317. ]).controller("HomeController", ["$state", "Session", function(e, t) {
  6318. var o = this;
  6319. o.hasHeaderLarge = function() {
  6320. return !t.hasSession() && e.is("home.news")
  6321. }
  6322. }
  6323. ]),
  6324. angular.module("help.login", ["router", "security", "zendesk.url"]).config(["$stateProvider", function(e) {
  6325. e.statePrivate("helpLogin", {
  6326. url: "/help-login?return_to",
  6327. controller: "HelpLoginController",
  6328. data: {
  6329. title: "HEAD_TITLE_HELP_LOGIN"
  6330. },
  6331. template: '<div class="help-login-backdrop"></div>'
  6332. })
  6333. }
  6334. ]).controller("HelpLoginController", ["$stateParams", "$window", "zendeskRedirectUrlFilter", function(e, t, o) {
  6335. t.location.href = o(e.return_to, !0)
  6336. }
  6337. ]),
  6338. angular.module("dev", ["header", "router", "templates", "web.pages"]).config(["$stateProvider", function(e) {
  6339. e.statePublic("dev", {
  6340. url: "/dev/:page",
  6341. templateUrl: "dev/dev.html",
  6342. controller: "DevController",
  6343. controllerAs: "DevController"
  6344. })
  6345. }
  6346. ]).controller("DevController", ["$stateParams", function(e) {
  6347. var t = this;
  6348. t.page = e.page.replace(/-/g, "_")
  6349. }
  6350. ]),
  6351. angular.module("ui.router").config(["$provide", function(e) {
  6352. e.decorator("$state", ["$delegate", "$rootScope", function(e, t) {
  6353. var o, r;
  6354. return e.hasPrevious = function() {
  6355. return Boolean(o) && Boolean(o.name)
  6356. }
  6357. ,
  6358. e.back = function() {
  6359. e.hasPrevious() ? e.go(o.name, r) : e.go("home.news")
  6360. }
  6361. ,
  6362. t.$on("$stateChangeSuccess", function(e, t, a, n, i) {
  6363. o = n,
  6364. r = i
  6365. }),
  6366. e
  6367. }
  6368. ])
  6369. }
  6370. ]),
  6371. angular.module("ui.bootstrap").config(["$provide", function(e) {
  6372. e.decorator("$uibModal", ["$delegate", "$rootScope", function(e, t) {
  6373. var o = e.open;
  6374. return e.open = function(e) {
  6375. var r, a, n = o(e);
  6376. return n.open = !0,
  6377. r = t.$on("$stateChangeSuccess", function() {
  6378. n.dismiss("cancel")
  6379. }),
  6380. a = t.$on("$locationChangeSuccess", function(e, t, o) {
  6381. t !== o && n.dismiss("cancel")
  6382. }),
  6383. n.result["finally"](function() {
  6384. n.open = !1,
  6385. r(),
  6386. a()
  6387. }),
  6388. n
  6389. }
  6390. ,
  6391. e
  6392. }
  6393. ])
  6394. }
  6395. ]),
  6396. angular.module("ezfb").config(["$provide", "ezfbProvider", function(e, t) {
  6397. var o = !1;
  6398. t.setLoadSDKFunction(["$window", "$document", "ezfbAsyncInit", "ezfbLocale", function(e, t, r, a) {
  6399. var n = t[0].createElement("script");
  6400. n.id = "facebook-jssdk",
  6401. n.async = !0,
  6402. n.src = "//connect.facebook.net/" + a + "/sdk.js",
  6403. t[0].body.appendChild(n),
  6404. e.fbAsyncInit = function() {
  6405. r(),
  6406. o = !0
  6407. }
  6408. }
  6409. ]),
  6410. e.decorator("ezfb", ["$delegate", function(e) {
  6411. return e.isSdkLoaded = function() {
  6412. return o
  6413. }
  6414. ,
  6415. e
  6416. }
  6417. ])
  6418. }
  6419. ]),
  6420. angular.module("community", ["article", "category", "fansites", "header", "photos", "rooms", "router", "tabs", "templates"]).config(["$stateProvider", "$urlRouterProvider", function(e, t) {
  6421. e.statePublic("community", {
  6422. url: "/community",
  6423. "abstract": !0,
  6424. templateUrl: "community/community.html"
  6425. }),
  6426. t.when("/community", "/community/photos")
  6427. }
  6428. ]),
  6429. angular.module("activate.service", ["config", "google.analytics", "security"]).factory("activate", ["$http", "CONFIG", "Session", "googleAnalytics", function(e, t, o, r) {
  6430. return function(a) {
  6431. return e.post(t.apiUrl + "/public/registration/activate", {
  6432. token: a
  6433. }).then(function(e) {
  6434. r.trackEvent("Email", "Activated"),
  6435. 200 === e.status && o.hasSession() && o.update(e.data)
  6436. })
  6437. }
  6438. }
  6439. ]),
  6440. angular.module("activate", ["activate.service", "locale", "notifier", "router"]).config(["$stateProvider", function(e) {
  6441. e.statePublic("activate", {
  6442. url: "/activate/:token",
  6443. controller: "ActivateController",
  6444. resolve: {
  6445. activation: ["$stateParams", "activate", function(e, t) {
  6446. return t(e.token)
  6447. }
  6448. ]
  6449. }
  6450. })
  6451. }
  6452. ]).controller("ActivateController", ["$state", "notifier", function(e, t) {
  6453. t.success("ACTIVATE_SUCCESS"),
  6454. e.go("home.news")
  6455. }
  6456. ]),
  6457. angular.module("templates", []).run(["$templateCache", function(e) {
  6458. e.put("dev/dev.html", '<habbo-header-small></habbo-header-small><section class="wrapper wrapper--content"><habbo-web-pages key="{{:: \'dev/\' + DevController.page}}" class="main"></habbo-web-pages><habbo-web-pages key="{{:: \'dev/\' + DevController.page + \'_box\'}}" class="aside aside--box aside--push-down"></habbo-web-pages></section>'),
  6459. e.put("community/community.html", '<habbo-header-small active="community"></habbo-header-small><habbo-tabs><habbo-tab path="/community/photos" translation-key="COMMUNITY_PHOTOS_TAB"></habbo-tab><habbo-tab path="/community/rooms" translation-key="COMMUNITY_ROOMS_TAB"></habbo-tab><habbo-tab path="/community/fansites" translation-key="COMMUNITY_FANSITES_TAB"></habbo-tab><habbo-tab path="/community/category" alternative-path="/community/article" translation-key="COMMUNITY_NEWS_TAB"></habbo-tab></habbo-tabs><main ui-view></main>'),
  6460. e.put("password-reset/password-reset-form.html", '<form ng-submit="PasswordResetFormController.update()" name="resetPasswordForm" novalidate class="form form--left"><habbo-password-new is-new="true" password-new="PasswordResetFormController.passwords.password" password-new-repeated="PasswordResetFormController.passwords.passwordRepeated"></habbo-password-new><div class="form__footer"><button ng-disabled="PasswordResetFormController.updateInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_CHANGE"></button></div></form>'),
  6461. e.put("password-reset/password-reset.html", '<habbo-header-small></habbo-header-small><main class="wrapper wrapper--content"><h1 translate="PASSWORD_RESET_TITLE"></h1><habbo-password-reset-form token="PasswordResetController.token" class="password-reset-form"></habbo-password-reset-form></main>'),
  6462. e.put("not-found/not-found.html", '<habbo-header-small></habbo-header-small><main class="wrapper wrapper--content not-found"><section class="not-found__content"><h3 translate="NOT_FOUND_PAGE_TITLE"></h3><div translate="NOT_FOUND_PAGE_TEXT"></div></section></main>'),
  6463. e.put("home/home.html", '<habbo-header-small ng-if="!HomeController.hasHeaderLarge()" active="home"></habbo-header-small><habbo-header-large ng-if="HomeController.hasHeaderLarge()" active="home"><habbo-register-banner></habbo-register-banner></habbo-header-large><habbo-tabs><habbo-tab path="/" strict-path="true" translation-key="HOME_NEWS_TAB"></habbo-tab><habbo-tab habbo-require-session path="/messaging" translation-key="HOME_MESSAGING_TAB"></habbo-tab></habbo-tabs><main class="wrapper wrapper--content" ui-view></main>'),
  6464. e.put("room/room.html", '<habbo-header-small></habbo-header-small><habbo-room-restricted ng-if="RoomController.room.doorMode != \'open\'" room="RoomController.room"></habbo-room-restricted><habbo-room-open ng-if="RoomController.room.doorMode == \'open\'" room="RoomController.room"></habbo-room-open>'),
  6465. e.put("registration/registration-form.html", '<h1 translate="REGISTRATION_TITLE"></h1><form ng-submit="RegistrationFormController.register()" name="registrationForm" novalidate class="form form--left registration-form"><div class="registration-form__social__wrapper"><div class="registration-form__social"><h3 class="registration-form__connect" translate="REGISTRATION_SOCIAL"></h3><habbo-facebook-connect on-login="RegistrationFormController.fbRegister()" type="large" translation-key="FACEBOOK_CONNECT"></habbo-facebook-connect></div></div><habbo-email-address email-address="RegistrationFormController.registration.email"><label for="email-address" class="form__label" translate="FORM_EMAIL_LABEL"></label><p translate="EMAIL_NEW_HELP"></p></habbo-email-address><habbo-password-new password-new="RegistrationFormController.registration.password" password-new-repeated="RegistrationFormController.registration.passwordRepeated" user-email="{{RegistrationFormController.registration.email}}"></habbo-password-new><habbo-partner-registration ng-if="RegistrationFormController.showPartnerRegistration" value="RegistrationFormController.registration.partnerRegister"></habbo-partner-registration><habbo-birthdate birthdate="RegistrationFormController.registration.birthdate"></habbo-birthdate><habbo-policies policies="RegistrationFormController.registration"></habbo-policies><habbo-captcha ng-if="!RegistrationFormController.hasCaptchaToken" captcha-token="RegistrationFormController.registration.captchaToken"></habbo-captcha><p class="registration-form__safety" translate="REGISTRATION_SAFETY"></p><div class="form__footer"><button ng-disabled="RegistrationFormController.registerInProgress" type="submit" class="form__submit registration-form__button" translate="REGISTRATION_BUTTON"></button></div><p class="registration-form__purchases" translate="REGISTRATION_PURCHASES"></p></form>'),
  6466. e.put("registration/registration.html", '<habbo-header-small active="register"></habbo-header-small><main class="wrapper wrapper--content"><habbo-registration-form ng-if="RegistrationController.isOpen"></habbo-registration-form><habbo-hotel-closed ng-if="!RegistrationController.isOpen" class="main"></habbo-hotel-closed></main>'),
  6467. e.put("playing-habbo/habbo-way.html", '<article class="main main--fixed static-content"><habbo-compile data="PlayingHabboController.page"></habbo-compile></article><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed aside--push-down"></habbo-ad-unit><habbo-web-pages key="common/box_learn_how_to_stay_safe" class="aside aside--box aside--fixed"></habbo-web-pages><habbo-web-pages key="common/box_parents_guide" class="aside aside--box aside--fixed"></habbo-web-pages>'),
  6468. e.put("playing-habbo/help.html", '<article class="main main--fixed static-content"><habbo-compile data="PlayingHabboController.page"></habbo-compile></article><habbo-web-pages key="playing_habbo/box_helplines" class="aside aside--box aside--fixed aside--push-down"></habbo-web-pages>'),
  6469. e.put("playing-habbo/how-to-play.html", '<article class="main main--fixed static-content"><habbo-compile data="PlayingHabboController.page"></habbo-compile></article><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed aside--push-down"></habbo-ad-unit><habbo-web-pages key="common/box_habbo_way" class="aside aside--box aside--fixed"></habbo-web-pages><habbo-web-pages key="common/box_learn_how_to_stay_safe" class="aside aside--box aside--fixed"></habbo-web-pages><habbo-web-pages key="common/box_need_help" class="aside aside--box aside--fixed"></habbo-web-pages>'),
  6470. e.put("playing-habbo/playing-habbo.html", '<habbo-header-small active="playingHabbo"></habbo-header-small><habbo-tabs><habbo-tab path="/playing-habbo/what-is-habbo" translation-key="PLAYING_HABBO_WHAT_IS_HABBO_TAB"></habbo-tab><habbo-tab path="/playing-habbo/how-to-play" translation-key="PLAYING_HABBO_HOW_TO_PLAY_TAB"></habbo-tab><habbo-tab path="/playing-habbo/habbo-way" translation-key="PLAYING_HABBO_HABBO_WAY_TAB"></habbo-tab><habbo-tab path="/playing-habbo/safety" translation-key="PLAYING_HABBO_SAFETY_TAB"></habbo-tab><habbo-tab path="/playing-habbo/help" translation-key="PLAYING_HABBO_HELP_TAB"></habbo-tab></habbo-tabs><main class="wrapper wrapper--content" ui-view></main>'),
  6471. e.put("playing-habbo/safety.html", '<article class="main main--fixed static-content"><habbo-compile data="PlayingHabboController.page"></habbo-compile></article><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed aside--push-down"></habbo-ad-unit><habbo-web-pages key="common/box_parents_guide" class="aside aside--box aside--fixed"></habbo-web-pages><habbo-web-pages key="common/box_need_help" class="aside aside--box aside--fixed"></habbo-web-pages>'),
  6472. e.put("playing-habbo/what-is-habbo.html", '<article class="main main--fixed static-content"><habbo-compile data="PlayingHabboController.page"></habbo-compile></article><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed aside--push-down"></habbo-ad-unit><habbo-web-pages key="common/box_how_to_play" class="aside aside--box aside--fixed"></habbo-web-pages><habbo-web-pages key="common/box_habbo_way" class="aside aside--box aside--fixed"></habbo-web-pages><habbo-web-pages key="common/box_parents_guide" class="aside aside--box aside--fixed"></habbo-web-pages>'),
  6473. e.put("profile/profile.html", '<habbo-header-small class="profile__header"><habbo-profile-header figure="{{:: ProfileController.profile.figureString}}" user="{{:: ProfileController.profile.name}}" motto="{{:: ProfileController.profile.motto}}" profile="true"><h1>{{:: ProfileController.profile.name}}</h1><div ng-if="ProfileController.profile.motto" class="profile__motto">{{:: ProfileController.profile.motto}}</div></habbo-profile-header></habbo-header-small><habbo-social-share type="profile"></habbo-social-share><main class="wrapper wrapper--content"><div ng-if="ProfileController.items.badges.length > 0\n || ProfileController.items.friends.length > 0\n || ProfileController.items.rooms.length > 0\n || ProfileController.items.groups.length > 0" class="profile__section"><div ng-if="ProfileController.profile.selectedBadges.length > 0" class="profile__card__wrapper--badges"><section class="profile__card__aligner"><div class="profile__card"><h2 translate="PROFILE_BADGES_TITLE" class="profile__card__title"></h2><habbo-badge-list badges="ProfileController.profile.selectedBadges" class="item-list--grid"></habbo-badge-list><div class="profile__card__footer"><habbo-profile-modal items="ProfileController.items.badges" type="badges"></habbo-profile-modal></div></div></section></div><div ng-if="ProfileController.items.friends.length > 0" class="profile__card__wrapper--friends"><section class="profile__card__aligner"><div class="profile__card"><h2 class="profile__card__title"><span translate="PROFILE_FRIENDS_TITLE"></span> <span class="profile__friends__count" translate="PROFILE_FRIENDS_COUNT" translate-values="{ current: ProfileController.items.friends.length > 5 ? 5 : ProfileController.items.friends.length, all: ProfileController.items.friends.length }"></span></h2><habbo-friend-list ng-init="fiveFriends = (ProfileController.items.friends | orderBy: random | limitTo: 5)" friends="fiveFriends" class="item-list--grid"></habbo-friend-list><div class="profile__card__footer"><habbo-profile-modal items="ProfileController.items.friends" type="friends"></habbo-profile-modal></div></div></section></div><div ng-if="ProfileController.items.rooms.length > 0" class="profile__card__wrapper--rooms"><section class="profile__card__aligner"><div class="profile__card"><h2 translate="PROFILE_ROOMS_TITLE" class="profile__card__title"></h2><habbo-room-list ng-init="fiveRooms = (ProfileController.items.rooms | orderBy: random | limitTo: 5)" rooms="fiveRooms" class="item-list--grid"></habbo-room-list><div class="profile__card__footer"><habbo-profile-modal items="ProfileController.items.rooms" type="rooms"></habbo-profile-modal></div></div></section></div><div ng-if="ProfileController.items.groups.length > 0" class="profile__card__wrapper--groups"><section class="profile__card__aligner"><div class="profile__card"><h2 translate="PROFILE_GROUPS_TITLE" class="profile__card__title"></h2><habbo-group-list ng-init="fiveGroups = (ProfileController.items.groups | orderBy: random | limitTo: 5)" groups="fiveGroups" class="item-list--grid"></habbo-group-list><div class="profile__card__footer"><habbo-profile-modal items="ProfileController.items.groups" type="groups"></habbo-profile-modal></div></div></section></div></div></main><section ng-if="ProfileController.photos.length > 0" class="wrapper wrapper--content"><div class="profile__creations"><h2 class="profile__creations__title" translate="PROFILE_PHOTOS_TITLE"></h2><habbo-columns-profile items="ProfileController.photos"></habbo-columns-profile><a href="/community/photos" class="profile__photos__link" translate="PHOTOS_TITLE"></a></div></section><section ng-if="ProfileController.stories.length > 0" class="wrapper wrapper--content"><div class="profile__creations"><h2 class="profile__creations__title" translate="PROFILE_CREATIONS_TITLE"></h2><habbo-columns-profile items="ProfileController.stories"></habbo-columns-profile></div></section><footer class="wrapper wrapper--content"><h2 class="profile__joined" translate="PROFILE_JOINED" translate-values="{ date: (ProfileController.profile.memberSince | date: \'longDate\') }"></h2><div class="profile__hearts"><i class="icon icon--heart"></i><i class="icon icon--heart"></i><i class="icon icon--heart"></i></div></footer>'),
  6474. e.put("settings/settings.html", '<habbo-header-small active="settings"></habbo-header-small><habbo-tabs title-key="SETTINGS_TITLE"><habbo-tab path="/settings/privacy" translation-key="SETTINGS_PRIVACY_TAB"></habbo-tab><habbo-tab habbo-require-habbo-account-session path="/settings/security" translation-key="SETTINGS_ACCOUNT_SECURITY_TAB"></habbo-tab><habbo-tab habbo-require-habbo-account-session path="/settings/password" translation-key="SETTINGS_PASSWORD_TAB"></habbo-tab><habbo-tab habbo-require-habbo-account-session path="/settings/email" translation-key="SETTINGS_EMAIL_TAB"></habbo-tab><habbo-tab path="/settings/avatars" translation-key="SETTINGS_AVATAR_TAB"></habbo-tab></habbo-tabs><main class="wrapper wrapper--content"><section class="main" ui-view></section><habbo-web-pages key="common/box_learn_how_to_stay_safe" class="aside aside--box aside--push-down"></habbo-web-pages><habbo-web-pages key="common/box_need_help" class="aside aside--box"></habbo-web-pages></main>'),
  6475. e.put("shop/shop.html", '<habbo-header-small active="shop"></habbo-header-small><habbo-tabs><habbo-tab path="/shop" strict-path="true" translation-key="SHOP_BUY_TAB"></habbo-tab><habbo-tab path="/shop/subscriptions" translation-key="SHOP_SUBSCRIPTIONS_TAB"></habbo-tab><habbo-tab path="/shop/prepaid" translation-key="SHOP_PREPAID_TAB"></habbo-tab><habbo-tab ng-if="ShopController.earnCreditsEnabled" path="/shop/earn-credits" translation-key="SHOP_EARN_CREDITS_TAB"></habbo-tab><habbo-tab path="/shop/history" translation-key="SHOP_HISTORY_TAB"></habbo-tab></habbo-tabs><main class="wrapper wrapper--content" ui-view></main><habbo-shop-footer class="wrapper wrapper--content"></habbo-shop-footer>'),
  6476. e.put("common/avatar/avatar.html", '<a ng-href="/profile/{{:: AvatarController.user | encodeURIComponent}}" class="avatar"><habbo-imager user="{{:: AvatarController.user}}" size="{{:: AvatarController.big ? \'largehead\' : \'bighead\'}}" class="avatar__image"></habbo-imager><h6 class="avatar__title" ng-class="{ \'avatar__title--big\': AvatarController.big }">{{:: AvatarController.user}}</h6></a>'),
  6477. e.put("common/badge/badge.html", "<img ng-src=\"{{:: BadgeController.badgeUrl + '/' + BadgeController.code + '.gif'}}\" alt=\"{{:: BadgeController.name}}\">"),
  6478. e.put("common/empty-results/empty-results.html", "<span translate=\"{{:: EmptyResultsController.translationKey || 'EMPTY_RESULTS_TEXT' }}\"></span>"),
  6479. e.put("common/ad-unit/ad-unit.html", '<habbo-ad-double-click ng-if="AdUnitController.hasAds() && !AdUnitController.isAdsPrevented()" unit="{{:: AdUnitController.unit}}"></habbo-ad-double-click>'),
  6480. e.put("common/footer/footer.html", '<footer class="wrapper"><div class="footer__media"><p class="footer__media__label" translate="FOLLOW_HABBO"></p><ul itemscope itemtype="http://schema.org/Organization"><link itemprop="url" href="https://www.habbo.nl"><li class="footer__media__item"><a href="https://www.facebook.com/HabboNL" class="footer__media__link" target="_blank" itemprop="sameAs"><i class="icon icon--facebook"></i></a></li><li class="footer__media__item"><a href="https://twitter.com/Habbo_Staff" class="footer__media__link" target="_blank" itemprop="sameAs"><i class="icon icon--twitter"></i></a></li><li class="footer__media__item"><a href="https://www.youtube.com/user/Habbo" class="footer__media__link" target="_blank" itemprop="sameAs"><i class="icon icon--youtube"></i></a></li><li class="footer__media__item"><a href="https://www.habbo.nl/rss.xml" class="footer__media__link" target="_blank" itemprop="sameAs"><i class="icon icon--rss"></i></a></li></ul></div><div class="footer__content"><ul class="footer__nav"><li ng-repeat="link in FooterController.links" class="footer__nav__item"><a ng-href="{{link + \'_LINK\' | translate | zendeskRedirectUrl}}" class="footer__nav__link" target="_blank" translate="{{:: link}}"></a></li></ul><p class="footer__copyright" translate="FOOTER_COPYRIGHT" translate-values="{ year: FooterController.currentYear }"></p><a href="http://www.sulake.com" target="_blank" class="footer__sulake">Sulake</a></div></footer>'),
  6481. e.put("common/accordion/accordion-item-content.html", '<div ng-hide="AccordionItemContentController.height === 0" class="accordion-item-content ng-hide" ng-transclude></div>'),
  6482. e.put("common/accordion/accordion-item.html", '<li ng-class="{ \'accordion-item--expanded\': AccordionItemController.expanded }" class="accordion-item" ng-transclude></li>'),
  6483. e.put("common/group-badge/group-badge.html", "<img ng-src=\"{{:: GroupBadgeController.imagingUrl + '/badge/' + GroupBadgeController.code + '.gif'}}\" alt=\"{{:: GroupBadgeController.name}}\">"),
  6484. e.put("common/eu-cookie-banner/eu-cookie-banner.html", '<div ng-show="EuCookieBannerController.show" class="eu-cookie-banner ng-hide"><div class="wrapper"><span translate="EU_COOKIE_BANNER"></span> <a ng-href="{{\'EU_COOKIE_BANNER_READ_MORE_LINK\' | translate}}" translate="EU_COOKIE_BANNER_READ_MORE" target="_blank"></a></div><i ng-click="EuCookieBannerController.close()" class="eu-cookie-banner__close icon icon--close"></i></div>'),
  6485. e.put("common/header/header-large.html", '<div habbo-sticky-header class="header__top sticky-header sticky-header--top"><div class="wrapper"><div class="header__top__content"><div ng-init="toggle = false;"><button ng-click="toggle = true;" ng-disabled="toggle" ng-hide="toggle" class="header__top__toggle">{{\'LOGIN\' | translate}}</button><div ng-show="toggle" class="header__login-form ng-hide"><habbo-login-form></habbo-login-form></div></div></div></div></div><div class="header__content" ng-transclude></div><header class="header__wrapper wrapper"><a href="/" class="header__habbo__logo"><h1 class="header__habbo__name" id="ga-linkid-habbo-large">Habbo</h1></a></header><habbo-navigation active="{{:: HeaderLargeController.active}}"></habbo-navigation>'),
  6486. e.put("common/header/header-small.html", '<habbo-header-ad></habbo-header-ad><div class="header__hotel"></div><header class="header__wrapper wrapper"><a href="/" class="header__habbo__logo"><h1 class="header__habbo__name" id="ga-linkid-habbo">Habbo</h1></a><habbo-user-menu habbo-require-session class="header__aside header__aside--user-menu"></habbo-user-menu><div habbo-require-no-session class="header__aside"><button ng-click="HeaderSmallController.openLoginModal()" class="header__login__button"><span class="header__login__icon" translate="LOGIN"></span></button></div></header><habbo-navigation active="{{:: HeaderSmallController.active}}"></habbo-navigation><div class="wrapper" ng-transclude></div>'),
  6487. e.put("common/hotel-closed/hotel-closed.html", '<div class="hotel-closed"><h1 translate="HOTEL_CLOSED_TITLE"></h1><h3 translate="HOTEL_CLOSED_HOURS"></h3><p translate="HOTEL_CLOSED_DESCRIPTION"></p><ul class="hotel-closed__list"><li><a href="/community/photos" translate="COMMUNITY_PHOTOS_TAB"></a></li><li><a href="/community/category/all" translate="COMMUNITY_NEWS_TAB"></a></li><li><a href="/shop" translate="NAVIGATION_SHOP"></a></li></ul></div>'),
  6488. e.put("common/message-container/message-container.html", '<section class="message-container" ng-transclude></section>'),
  6489. e.put("common/like/like.html", '<div class="like__action"><a ng-click="(LikeController.data | myLike) ? LikeController.unlike() : LikeController.like()"><span translate="{{ (LikeController.data | myLike) ? \'UNLIKE\' : \'LIKE\' }}"></span> <span class="like__count">{{LikeController.data.likes.length}}</span></a></div><div ng-click="LikeController.show = !LikeController.show;" ng-mouseenter="LikeController.mouseenter()" ng-mouseleave="LikeController.show = false;" habbo-false-on-outside-click="LikeController.show" class="like__thumb"><div ng-if="LikeController.data.likes.length > 0" ng-show="LikeController.show" class="like__users ng-hide"><ul><li ng-if="LikeController.data | myLike" class="like__user"><habbo-avatar user="{{:: LikeController.data | myLike}}"></habbo-avatar></li><li ng-repeat="liker in LikeController.data | othersLikes | limitTo: ((LikeController.data | myLike) ? 4 : 5) track by liker" class="like__user"><habbo-avatar user="{{:: liker}}"></habbo-avatar></li></ul><small ng-if="LikeController.data.likes.length > 5" class="like__more">...{{ \'MORE_LIKES\' | translate: { count: LikeController.data.likes.length - 5 } }}</small></div><i class="like__icon icon icon--like"></i></div>'),
  6490. e.put("common/lightbox/lightbox-modal.html", '<button ng-click="$dismiss()" class="lightbox__close modal__close"></button> <img ng-src="{{:: LightboxController.src}}" class="lightbox__image">'),
  6491. e.put("common/imager/imager.html", '<img ng-src="{{:: ImagerController.src}}" ng-srcset="{{:: ImagerController.src + \' 1x\' + (ImagerController.src2x ? (\', \' + ImagerController.src2x + \' 2x\') : \'\')}}" ng-style="{ \'min-width\': ImagerController.dimensions.width }" alt="{{:: ImagerController.name || ImagerController.user }}" width="{{:: ImagerController.dimensions.width }}" height="{{:: ImagerController.dimensions.height }}" class="imager">'),
  6492. e.put("common/tabs/tab.html", '<li class="tab"><a ng-href="{{:: TabController.path}}" ng-class="{ \'tab__link--active\': TabController.active }" class="tab__link" translate="{{:: TabController.translationKey}}"></a></li>'),
  6493. e.put("common/tabs/tabs.html", '<nav ng-hide="TabsController.tabs.length < 2" class="tabs"><h1 ng-if="TabsController.titleKey" class="tabs__title" translate="{{:: TabsController.titleKey}}"></h1><div ng-click="TabsController.open = !TabsController.open" class="tabs__toggle"><div ng-class="{\'tabs__toggle__title--active\': TabsController.open}" class="tabs__toggle__title" translate="{{TabsController.activeTab.translationKey}}"></div></div><ul class="tabs__menu ng-hide" ng-hide="!TabsController.open" ng-transclude></ul></nav>'),
  6494. e.put("common/official-room-avatar/official-room-avatar.html", '<div class="room-official-avatar__wrapper"><div class="room-official-avatar__inner"><div class="room-official-avatar__image"></div><h6 class="room-official-avatar__text" translate="ROOM_OFFICIAL_OWNER"></h6></div></div>'),
  6495. e.put("common/social-share/social-share.html", '<div class="social-share"><a ng-click="SocialShareController.shareOnTwitter()" class="social-share__link"><i class="icon icon--twitter"></i></a> <a ng-click="SocialShareController.shareOnFacebook()" class="social-share__link"><i class="icon icon--facebook"></i></a> <span class="social-share__text" translate="SOCIAL_SHARE"></span></div>'),
  6496. e.put("community/fansites/fansites.html", '<section class="wrapper wrapper--content"><article class="main main--fixed static-content"><habbo-compile data="FansitesController.fansites"></habbo-compile></article><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed aside--push-down"></habbo-ad-unit><habbo-web-pages key="common/box_habbo_way" class="aside aside--box aside--fixed"></habbo-web-pages></section>'),
  6497. e.put("community/photos/photos.html", '<header class="photos__header"><div class="photos__header__container wrapper"><div class="photos__header__image__wrapper"><div class="photos__header__image"></div></div><div class="photos__header__content"><h1 class="photos__header__title" translate="PHOTOS_TITLE"></h1><p translate="PHOTOS_DESCRIPTION"></p></div></div></header><section class="wrapper wrapper--content"><habbo-columns-channel items="PhotosController.photos"></habbo-columns-channel></section>'),
  6498. e.put("community/rooms/rooms.html", '<header class="rooms__header"><div class="rooms__header__container wrapper"><div class="rooms__header__image__wrapper"><div class="rooms__header__image"></div></div><div class="rooms__header__content"><h1 class="rooms__header__title" translate="ROOMS_TITLE"></h1><p translate="ROOMS_DESCRIPTION"></p></div></div></header><section class="wrapper wrapper--content rooms-wrapper"><div ng-repeat="room in RoomsController.rooms" class="room-item"><a ng-href="/room/{{:: room.id}}" class="room-item__link"><div class="room-item__thumbnail"><img habbo-remove-on-error class="room-item__thumbnail__image" ng-src="{{room.thumbnailUrl}}"></div></a> <a ng-href="/room/{{:: room.id}}" class="room-item__link"><h2 class="room-item__title">{{:: room.name}}</h2></a><p class="room-item__description">{{:: room.description}}</p><div ng-switch="room.publicRoom"><official-room-avatar ng-switch-when="true" class="room-item__owner--official"></official-room-avatar><habbo-avatar ng-switch-when="false" class="room-item__owner--user" user="{{:: room.ownerName}}"></habbo-avatar></div></div></section>'),
  6499. e.put("community/article/article.html", '<section class="wrapper wrapper--content"><habbo-compile data="ArticleController.article" class="main main--fixed"></habbo-compile><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed"></habbo-ad-unit><habbo-web-pages key="common/box_learn_how_to_stay_safe" class="aside aside--box aside--fixed"></habbo-web-pages></section>'),
  6500. e.put("email/email-report-unauthorized/email-report-unauthorized-form.html", '<form ng-submit="EmailReportUnauthorizedFormController.report()" name="emailReportUnauthorizedForm" novalidate><div class="form__footer"><a href="/" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="EmailReportUnauthorizedFormController.reportInProgress" type="submit" class="form__submit" translate="EMAIL_REPORT_UNAUTHORIZED_BUTTON"></button></div></form>'),
  6501. e.put("email/email-report-unauthorized/email-report-unauthorized.html", '<habbo-header-small></habbo-header-small><main class="wrapper wrapper--content"><section class="main"><habbo-message-container type="exclamation"><h2 translate="EMAIL_REPORT_UNAUTHORIZED_TITLE"></h2><h4 class="email-report-unauthorized-form__email">{{:: EmailReportUnauthorizedController.email}}</h4><p translate="EMAIL_REPORT_UNAUTHORIZED_TEXT"></p><habbo-email-report-unauthorized-form emailaddress="EmailReportUnauthorizedController.email" hash="EmailReportUnauthorizedController.hash"></habbo-email-report-unauthorized-form></habbo-message-container></section></main>'),
  6502. e.put("community/category/category.html", '<section class="wrapper wrapper--content"><habbo-compile data="CategoryController.category" class="main main--fixed"></habbo-compile><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed"></habbo-ad-unit><habbo-web-pages key="common/box_learn_how_to_stay_safe" class="aside aside--box aside--fixed"></habbo-web-pages></section>'),
  6503. e.put("home/messaging/messaging.html", '<section><h1 translate="MESSAGING_TITLE"></h1><habbo-discussions items="MessagingController.discussions"></habbo-discussions></section>'),
  6504. e.put("home/news/news.html", '<habbo-moderation-notification habbo-require-session></habbo-moderation-notification><section><h1 translate="NEWS_TITLE"></h1><div class="main main--fixed"><habbo-compile data="NewsController.promos"></habbo-compile><div class="news__navigation"><a href="/community/category/all" class="news__more" translate="NEWS_MORE"></a></div></div><habbo-ad-unit unit="inlineRectangle" class="aside aside--fixed"></habbo-ad-unit><habbo-web-pages key="common/box_learn_how_to_stay_safe" class="aside aside--box aside--fixed"></habbo-web-pages><habbo-web-pages key="common/box_parents_guide" class="aside aside--box aside--fixed"></habbo-web-pages></section>'),
  6505. e.put("room/room-info/room-info.html", '<ul class="room-info"><li class="room-info__row"><h3 class="room-info__header" translate="ROOM_DESCRIPTION"></h3><span class="room-info__value room-info--description">{{:: RoomInfoController.description}}</span></li><li class="room-info__row"><h3 class="room-info__header" translate="ROOM_TAGS"></h3><span class="room-info__value">{{:: RoomInfoController.tags.join(\', \')}}</span></li></ul>'),
  6506. e.put("hotel/client/client.html", '<div ngsf-fullscreen habbo-client-close-fullscreen-on-hide ng-class="{ \'client--visible\': ClientController.visible }" class="client"><div class="client__buttons"><button ng-click="ClientController.close()" habbo-client-close-expander class="client__close"><i class="client__close__icon icon icon--habbo"></i><div habbo-client-close-expand class="client__close__expand"><div class="client__close__text" translate="CLIENT_TO_WEB_BUTTON"></div></div></button> <button ngsf-toggle-fullscreen class="client__fullscreen"><i show-if-fullscreen="false" class="client__fullscreen__icon icon icon--fullscreen"></i> <i show-if-fullscreen class="client__fullscreen__icon icon icon--fullscreen-back"></i></button></div><iframe id="hotel-client" ng-if="ClientController.isOpen && ClientController.flashEnabled" ng-src="{{ ClientController.client.clienturl }}" habbo-client-communication class="client__frame"></iframe><habbo-client-reload ng-if="ClientController.isOpen && ClientController.flashEnabled && !ClientController.running" reload="ClientController.reload()"></habbo-client-reload><habbo-client-error ng-if="ClientController.isOpen && !ClientController.flashEnabled"></habbo-client-error><habbo-client-closed ng-if="!ClientController.isOpen"></habbo-client-closed><habbo-interstitial></habbo-interstitial></div>'),
  6507. e.put("room/room-picture/room-picture.html", '<section class="room-picture__wrapper"><img habbo-remove-on-error class="room-picture__image" ng-src="{{:: RoomPictureController.url}}"></section>'),
  6508. e.put("room/room-restricted/room-restricted.html", '<main class="wrapper wrapper--content room-restricted"><section class="room-restricted__content"><h3 translate="ROOM_RESTRICTED_TITLE"></h3><h4 class="room-restricted__name">{{:: RoomRestrictedController.room.name}}</h4><div class="room-restricted__explanation" translate="ROOM_RESTRICTED_TEXT"></div><a habbo-require-flash ng-href="/hotel?room={{:: RoomRestrictedController.room.id}}" class="room__enter-button"><span class="room__enter-button__text" translate="ROOM_ENTER_BUTTON"></span></a></section></main>'),
  6509. e.put("registration/birthdate/birthdate.html", '<fieldset class="form__fieldset"><label for="birthdate-day" class="form__label" translate="FORM_BIRTHDATE_LABEL"></label><p translate="BIRTHDATE_HELP"></p><div class="form__field"><select id="birthdate-day" ng-model="BirthdateController.day" ng-class="{ \'ng-invalid\': (BirthdateController.FormController.birthdate.$invalid && !day|| BirthdateController.FormController.birthdate.$error.remoteDataAge)\n && (!BirthdateController.FormController.birthdate.$pristine || BirthdateController.FormController.$submitted) }" class="form__select birthdate__day"><option translate="BIRTHDATE_DAY"></option><option ng-repeat="day in BirthdateController.days | daysInMonth: BirthdateController.month : BirthdateController.year" ng-value="{{day}}">{{day}}</option></select><select ng-model="BirthdateController.month" ng-class="{ \'ng-invalid\': (BirthdateController.FormController.birthdate.$invalid && !month || BirthdateController.FormController.birthdate.$error.remoteDataAge)\n && (!BirthdateController.FormController.birthdate.$pristine || BirthdateController.FormController.$submitted) }" class="form__select birthdate__month"><option translate="BIRTHDATE_MONTH"></option><option ng-repeat="month in BirthdateController.months" ng-value="{{month.value}}" translate="{{month.translationKey}}"></option></select><select ng-model="BirthdateController.year" ng-class="{ \'ng-invalid\': (BirthdateController.FormController.birthdate.$invalid && !year || BirthdateController.FormController.birthdate.$error.remoteDataAge)\n && (!BirthdateController.FormController.birthdate.$pristine || BirthdateController.FormController.$submitted) }" class="form__select birthdate__year"><option translate="BIRTHDATE_YEAR"></option><option ng-repeat="year in BirthdateController.years" ng-value="{{year}}">{{year}}</option></select><input name="birthdate" ng-model="BirthdateController.birthdate" required type="hidden"><div ng-if="BirthdateController.FormController.birthdate.$invalid && (!BirthdateController.FormController.birthdate.$pristine || BirthdateController.FormController.$submitted)" ng-messages="BirthdateController.FormController.birthdate.$error" class="form__popover form__popover--error"><div ng-message="required">{{ \'ERROR_FIELD_REQUIRED\' | translate }}</div></div></div></fieldset>'),
  6510. e.put("registration/policies/policies.html", '<fieldset class="form__fieldset form__fieldset--box"><div class="form__field"><label for="terms-of-service" class="form__label form__label--checkbox"><input id="terms-of-service" name="termsOfServiceAccepted" ng-model="PoliciesController.policies.termsOfServiceAccepted" required type="checkbox" class="form__checkbox"> <span translate="POLICIES_TERMS_OF_SERVICE"></span></label><div ng-if="PoliciesController.FormController.termsOfServiceAccepted.$invalid\n && (!PoliciesController.FormController.termsOfServiceAccepted.$pristine\n || PoliciesController.FormController.$submitted)" ng-messages="PoliciesController.FormController.termsOfServiceAccepted.$error" class="form__popover form__popover--error"><div ng-message="required">{{ \'ERROR_FIELD_REQUIRED\' | translate }}</div></div></div><div class="form__field"><label for="marketing" class="form__label form__label--checkbox"><input id="marketing" ng-model="PoliciesController.policies.marketingAllowed" type="checkbox" class="form__checkbox"> <span translate="POLICIES_MARKETING"></span></label></div></fieldset>'),
  6511. e.put("home/register-banner/register-banner.html", '<div class="register-banner__hotel"></div><div class="register-banner__wrapper"><div class="register-banner__register"><h1 class="register-banner__logo">Habbo</h1><h2 class="register-banner__title" translate="HEADER_TITLE"></h2><a href="/registration" habbo-android-download-link habbo-ios-download-link class="register-banner__button" translate="REGISTER_PROMPT"></a><habbo-local-register-banner></habbo-local-register-banner></div></div>'),
  6512. e.put("registration/partner-registration/partner-registration.html", '<fieldset class="form__fieldset form__fieldset--box partner-registration"><label for="partner-register" class="form__label" translate="PARTNER_REGISTRATION_LABEL"></label><p translate="PARTNER_REGISTRATION_HELP"></p><div class="form__field"><label for="partner-register" class="form__label--checkbox partner-registration__checkbox"><input id="partner-register" ng-model="PartnerRegistrationController.value" type="checkbox" class="form__checkbox"> <span translate="PARTNER_REGISTRATION_ACCEPT"></span></label></div></fieldset>'),
  6513. e.put("room/room-open/room-open.html", '<main><section class="wrapper wrapper--content"><div class="room__thumbnail"><img habbo-remove-on-error class="room__thumbnail__image" ng-src="{{:: RoomOpenController.room.thumbnailUrl}}"></div><div class="room__content"><h1 class="room__content__title">{{:: RoomOpenController.room.name}}</h1><div class="room__content__left"><div ng-switch="RoomOpenController.room.publicRoom"><official-room-avatar ng-switch-when="true" class="room__owner--official"></official-room-avatar><habbo-avatar ng-switch-when="false" class="room__owner--user" user="{{:: RoomOpenController.room.ownerName}}"></habbo-avatar></div><habbo-room-info description="{{:: RoomOpenController.room.description}}" tags="RoomOpenController.room.tags"></habbo-room-info><a habbo-require-flash ng-href="/hotel?room={{:: RoomOpenController.room.id}}" class="room__enter-button"><span class="room__enter-button__text" translate="ROOM_ENTER_BUTTON"></span></a></div><div class="room__content__right"><div class="room__details"><h3 translate="ROOM_DETAILS"></h3><dl><dt translate="ROOM_RATING"></dt><dd>{{:: RoomOpenController.room.rating}}</dd><dt translate="ROOM_MAX_USERS"></dt><dd>{{:: RoomOpenController.room.maximumVisitors}}</dd></dl></div><div class="room__actions"><a class="room__report" habbo-require-flash ng-href="{{:: RoomOpenController.room.hotelReportLink}}"><span class="room__report__text" translate="ROOM_REPORT_ACTION"></span></a></div></div></div></section><habbo-room-picture url="{{:: RoomOpenController.room.imageUrl}}"></habbo-room-picture></main>'),
  6514. e.put("profile/creation/creation-content.html", '<section class="creation-content" ng-style="{ \'max-width\': CreationContentController.creation.contentWidth }"><div class="creation-content__expander"><h2 ng-if="CreationContentController.creation.title" class="creation-content__title">{{:: CreationContentController.creation.title}}</h2><div class="creation-content__view"><a habbo-creation-href="CreationContentController.previous" habbo-navigate-to-on-key="left" ng-class="{ \'creation-content__link--disabled\' : !CreationContentController.previous }" class="creation-content__link"><i class="icon icon--arrow-prev"></i></a> <img ng-src="{{:: CreationContentController.creation.url}}" width="{{:: CreationContentController.creation.contentWidth}}" height="{{:: CreationContentController.creation.contentHeight}}" class="creation-content__creation"> <a habbo-creation-href="CreationContentController.next" habbo-navigate-to-on-key="right" ng-class="{ \'creation-content__link--disabled\' : !CreationContentController.next }" class="creation-content__link"><i class="icon icon--arrow-next"></i></a></div><div class="creation-content__meta"><time ng-if="CreationContentController.creation.time">{{:: CreationContentController.creation.time | date: \'longDate\'}}</time><habbo-report ng-if="CreationContentController.creation.type === \'PHOTO\'" creation="CreationContentController.creation"></habbo-report><habbo-like data="CreationContentController.creation" class="creation-content__like"></habbo-like></div><div ng-if="CreationContentController.creation.type === \'PHOTO\'" class="creation-content__actions"><a href="/community/photos" class="creation-content__channel-link" translate="PHOTOS_TITLE"></a><habbo-photo-delete ng-if="CreationContentController.isDeletable()" creation="CreationContentController.creation" class="creation-content__delete"></habbo-photo-delete></div></div></section>'),
  6515. e.put("profile/creation/creation.html", '<habbo-header-small class="profile__header"><habbo-profile-header user="{{:: CreationController.creation.creator_name}}"><h1><small class="creation__header-by" translate="BY"></small> <span>{{:: CreationController.creation.creator_name}}</span></h1></habbo-profile-header></habbo-header-small><habbo-social-share type="creation"></habbo-social-share><main class="wrapper wrapper--content"><habbo-creation-content creation="CreationController.creation" previous="CreationController.previous" next="CreationController.next"></habbo-creation-content></main>'),
  6516. e.put("profile/item-lists/badges.html", '<ul ng-init="limit = 20" infinite-scroll="limit = limit + 10" infinite-scroll-container="\'.modal\'" infinite-scroll-distance="1"><li ng-repeat="badge in BadgeListController.badges | byNameDescriptionOrMotto: BadgeListController.query | limitTo: limit" class="item item--small item--badge"><div class="item__content"><div class="item__icon"><div class="item__icon__aligner"><habbo-badge code="{{:: badge.code}}" name="{{:: badge.name}}"></habbo-badge></div></div><div class="item__text"><h6 class="item__title item__title--multi-line">{{:: badge.name}}</h6><p class="item__description">{{:: badge.description}}</p></div></div></li></ul>'),
  6517. e.put("profile/item-lists/friends.html", '<ul ng-init="limit = 14" infinite-scroll="limit = limit + 7" infinite-scroll-container="\'.modal\'" infinite-scroll-distance="1"><li ng-repeat="friend in FriendListController.friends | byNameDescriptionOrMotto: FriendListController.query | limitTo: limit" class="item item--friend"><a ng-href="/profile/{{:: friend.name | encodeURIComponent}}" ng-init="wave = false" ng-mouseenter="wave = true" ng-mouseleave="wave = false" class="item__content"><div class="item__icon" ng-switch="wave"><habbo-imager ng-switch-when="false" figure="{{:: friend.figureString}}" name="{{:: friend.name}}" direction="s" action="stand" class="item__icon__friend"></habbo-imager><habbo-imager ng-switch-when="true" figure="{{:: friend.figureString}}" name="{{:: friend.name}}" direction="s" action="wave" class="item__icon__friend"></habbo-imager></div><div class="item__text"><h6 class="item__title item__title--single-line">{{:: friend.name}}</h6><p ng-if="friend.motto" class="item__description">{{:: friend.motto}}</p></div></a></li></ul>'),
  6518. e.put("profile/item-lists/groups.html", '<ul ng-init="limit = 20" infinite-scroll="limit = limit + 10" infinite-scroll-container="\'.modal\'" infinite-scroll-distance="1"><li ng-repeat="group in GroupListController.groups | byNameDescriptionOrMotto: GroupListController.query | limitTo: limit" class="item item--small item--group"><a habbo-flash-href="{{:: group.roomId ? \'/hotel?room=\' + group.roomId : \'\'}}" class="item__content"><div class="item__icon"><div class="item__icon__aligner"><habbo-group-badge code="{{:: group.badgeCode}}" name="{{:: group.name}}"></habbo-group-badge></div></div><div class="item__text"><h6 class="item__title item__title--multi-line">{{:: group.name}}</h6><p ng-if="group.description" class="item__description">{{:: group.description}}</p></div></a></li></ul>'),
  6519. e.put("profile/item-lists/rooms.html", '<ul ng-init="limit = 16" infinite-scroll="limit = limit + 8" infinite-scroll-container="\'.modal\'" infinite-scroll-distance="1"><li ng-repeat="room in RoomListController.rooms | byNameDescriptionOrMotto: RoomListController.query | limitTo: limit" class="item item--room"><a ng-href="/room/{{:: room.id}}" class="item__content"><habbo-room-icon class="item__icon" url="{{:: room.thumbnailUrl}}"></habbo-room-icon><div class="item__text"><h6 class="item__title item__title--single-line">{{:: room.name}}</h6><p ng-if="room.description" class="item__description">{{:: room.description}}</p></div></a></li></ul>'),
  6520. e.put("profile/profile-header/profile-header.html", '<div class="profile-header__avatar"><div ng-if="ProfileHeaderController.profile === \'true\'" class="profile-header__link"><habbo-imager ng-if="!ProfileHeaderController.isCroco(ProfileHeaderController.motto)" figure="{{:: ProfileHeaderController.figure}}" user="{{:: ProfileHeaderController.figure ? \'\' : ProfileHeaderController.user}}" name="{{:: ProfileHeaderController.user}}" class="profile-header__image"></habbo-imager><div ng-if="ProfileHeaderController.isCroco(ProfileHeaderController.motto)" class="profile-header__image profile-header__image--croco"><img src="https://habboo-a.akamaihd.net/habbo-web/america/nl/assets/images/croco.dcdb9e74.png"></div></div><a ng-if="ProfileHeaderController.profile !== \'true\'" ng-href="/profile/{{:: ProfileHeaderController.user | encodeURIComponent}}" class="profile-header__link"><habbo-imager figure="{{:: ProfileHeaderController.figure}}" user="{{:: ProfileHeaderController.figure ? \'\' : ProfileHeaderController.user}}" name="{{:: ProfileHeaderController.user}}" size="largehead" class="profile-header__image profile-header__image--largehead"></habbo-imager></a></div><div class="profile-header__details"><div ng-if="ProfileHeaderController.profile === \'true\'" ng-transclude></div><a ng-if="ProfileHeaderController.profile !== \'true\'" ng-href="/profile/{{:: ProfileHeaderController.user | encodeURIComponent}}" class="profile-header__details__link" ng-transclude></a></div>'),
  6521. e.put("profile/profile-modal/profile-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="{{:: \'PROFILE_\' + ProfileModalController.type.toUpperCase() + \'_TITLE\'}}" class="modal__title"></h3><habbo-search query="query"></habbo-search><div class="item-list--stacked" ng-switch="ProfileModalController.type"><habbo-badge-list ng-switch-when="badges" badges="ProfileModalController.items" query="query"></habbo-badge-list><habbo-friend-list ng-switch-when="friends" friends="ProfileModalController.items" query="query"></habbo-friend-list><habbo-room-list ng-switch-when="rooms" rooms="ProfileModalController.items" query="query"></habbo-room-list><habbo-group-list ng-switch-when="groups" groups="ProfileModalController.items" query="query"></habbo-group-list></div><habbo-empty-results ng-if="(ProfileModalController.items | byNameDescriptionOrMotto: query).length === 0" class="profile-modal__empty"></habbo-empty-results>'),
  6522. e.put("router/spinner/spinner.html", '<div class="spinner"><h1 class="spinner__logo">Habbo</h1><div class="spinner__indicator"></div></div>'),
  6523. e.put("settings/account-security/account-security-edit.html", '<habbo-message-container ng-if="AccountSecurityEditController.accountSecurityStatus === \'enabled\'" type="check"><h3 translate="ACCOUNT_SECURITY_STATUS_ENABLED_TITLE"></h3><div class="account-security__status"><button ng-click="AccountSecurityEditController.openModal()" class="account-security__edit" translate="ACCOUNT_SECURITY_EDIT_BUTTON"></button> <button ng-click="AccountSecurityEditController.disable()" ng-disabled="AccountSecurityEditController.disableInProgress" class="account-security__disable" translate="ACCOUNT_SECURITY_DISABLE"></button></div></habbo-message-container><habbo-message-container ng-if="AccountSecurityEditController.accountSecurityStatus === \'disabled\'" type="exclamation"><h3 translate="ACCOUNT_SECURITY_STATUS_DISABLED_TITLE"></h3><button ng-click="AccountSecurityEditController.openModal()" class="account-security__enable" translate="ACCOUNT_SECURITY_ENABLE_BUTTON"></button></habbo-message-container><habbo-message-container ng-if="AccountSecurityEditController.accountSecurityStatus === \'identity_verification_required\'" type="exclamation"><h3 translate="ACCOUNT_SECURITY_STATUS_VERIFICATION_REQUIRED_TITLE"></h3><a ng-href="/settings/email" translate="ACCOUNT_SECURITY_STATUS_VERIFICATION_REQUIRED_LINK_TEXT"></a></habbo-message-container>'),
  6524. e.put("settings/account-security/account-security.html", '<h2 translate="ACCOUNT_SECURITY_TITLE"></h2><p translate="ACCOUNT_SECURITY_DESCRIPTION"></p><habbo-account-security-edit account-security-status="AccountSecurityController.accountSecurityStatus"></habbo-account-security-edit><div ng-if="AccountSecurityController.accountSecurityStatus === \'enabled\'" class="account-security__trusted-locations"><h2 translate="ACCOUNT_SECURITY_TRUSTED_LOCATIONS_TITLE"></h2><p translate="ACCOUNT_SECURITY_TRUSTED_LOCATIONS_DESCRIPTION"></p><habbo-trusted-locations-reset></habbo-trusted-locations-reset></div>'),
  6525. e.put("settings/account-security/trusted-locations-reset.html", '<button ng-click="TrustedLocationsResetController.reset()" ng-disabled="TrustedLocationsResetController.inProgress" class="account-security__reset" translate="ACCOUNT_SECURITY_RESET_TRUSTED_LOGINS_BUTTON"></button>'),
  6526. e.put("settings/email-change/email-change-form.html", '<form ng-submit="EmailChangeFormController.update()" name="emailChangeForm" autocomplete="off" novalidate class="form form--left"><habbo-password-current password-current="EmailChangeFormController.emailChangeData.currentPassword"></habbo-password-current><habbo-email-address email-address="EmailChangeFormController.emailChangeData.newEmail" type="box"><label for="email-address" class="form__label" translate="FORM_NEW_EMAIL_LABEL"></label><p translate="EMAIL_NEW_HELP"></p></habbo-email-address><div class="form__footer"><button ng-disabled="EmailChangeFormController.updateInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_CHANGE"></button></div></form>'),
  6527. e.put("settings/email-change/email-change.html", '<habbo-activation-status></habbo-activation-status><h2 translate="EMAIL_CHANGE_TITLE"></h2><habbo-email-change-form></habbo-email-change-form>'),
  6528. e.put("settings/avatar-selection/avatar-selection.html", '<h2 translate="AVATAR_SELECTION_TITLE"></h2><habbo-avatar-create require-non-staff-account-session avatars="AvatarSelectionController.avatars"></habbo-avatar-create><habbo-avatar-search avatars="AvatarSelectionController.avatars"></habbo-avatar-search>'),
  6529. e.put("settings/privacy-settings/privacy-settings-form.html", '<form ng-submit="PrivacySettingsFormController.save()" name="privacySettingsForm" novalidate class="form form--left"><fieldset class="form__fieldset"><h4 translate="SETTINGS_PROFILE_VISIBILITY_TITLE"></h4><p translate="SETTINGS_PROFILE_VISIBILITY_DESCRIPTION"></p><div class="form__field"><label class="form__label form__label--radiobutton"><input name="profileVisible" ng-model="PrivacySettingsFormController.privacySettings.profileVisible" ng-value="true" type="radio" class="form__radiobutton"> <span translate="SETTINGS_EVERYONE_LABEL"></span></label></div><div class="form__field"><label class="form__label form__label--radiobutton"><input name="profileVisible" ng-model="PrivacySettingsFormController.privacySettings.profileVisible" ng-value="false" type="radio" class="form__radiobutton"> <span translate="SETTINGS_ME_LABEL"></span></label></div></fieldset><fieldset class="form__fieldset form__fieldset--box"><h4 translate="SETTINGS_ONLINE_STATUS_TITLE"></h4><p translate="SETTINGS_ONLINE_STATUS_DESCRIPTION"></p><div class="form__field"><label class="form__label form__label--radiobutton"><input name="onlineStatusVisible" ng-model="PrivacySettingsFormController.privacySettings.onlineStatusVisible" ng-value="true" type="radio" class="form__radiobutton"> <span translate="SETTINGS_EVERYONE_LABEL"></span></label></div><div class="form__field"><label class="form__label form__label--radiobutton"><input name="onlineStatusVisible" ng-model="PrivacySettingsFormController.privacySettings.onlineStatusVisible" ng-value="false" type="radio" class="form__radiobutton"> <span translate="SETTINGS_ME_LABEL"></span></label></div></fieldset><fieldset class="form__fieldset"><h4 translate="SETTINGS_FRIENDS_CAN_FOLLOW_TITLE"></h4><div class="form__field"><label for="friend-can-follow" class="form__label form__label--checkbox"><input id="friend-can-follow" name="friendCanFollow" ng-model="PrivacySettingsFormController.privacySettings.friendCanFollow" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_FRIEND_CAN_FOLLOW_LABEL"></span></label></div></fieldset><fieldset class="form__fieldset form__fieldset--box"><h4 translate="SETTINGS_FRIEND_REQUESTS_ENABLED_TITLE"></h4><div class="form__field"><label for="friend-request-enable" class="form__label form__label--checkbox"><input id="friend-request-enable" name="friendRequestEnabled" ng-model="PrivacySettingsFormController.privacySettings.friendRequestEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_FRIEND_REQUESTS_LABEL"></span></label></div></fieldset><fieldset class="form__fieldset"><h4 translate="SETTINGS_OFFLINE_MESSAGING_ENABLED_TITLE"></h4><div class="form__field"><label for="offline-messaging-enable" class="form__label form__label--checkbox"><input id="offline-messaging-enable" name="offlineMessagingEnabled" ng-model="PrivacySettingsFormController.privacySettings.offlineMessagingEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_OFFLINE_MESSAGING_LABEL"></span></label></div></fieldset><fieldset class="form__fieldset form__fieldset--box"><h4 translate="SETTINGS_EMAIL_NOTIFICATIONS_TITLE"></h4><div class="form__field"><label for="email-newsletter-enable" class="form__label form__label--checkbox"><input id="email-newsletter-enable" name="emailNewsletterEnabled" ng-model="PrivacySettingsFormController.privacySettings.emailNewsletterEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_NEWSLETTER_LABEL"></span></label></div><div class="form__field"><span translate="SETTINGS_EMAIL_NOTIFICATIONS_SUBTITLE"></span><label class="form__label form__label--checkbox"><input name="emailMiniMailNotificationEnabled" ng-model="PrivacySettingsFormController.privacySettings.emailMiniMailNotificationEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_NOTIFICATION_MINIMAIL_LABEL"></span></label><label class="form__label form__label--checkbox"><input name="emailFriendRequestNotificationEnabled" ng-model="PrivacySettingsFormController.privacySettings.emailFriendRequestNotificationEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_NOTIFICATION_FRIEND_REQUEST_LABEL"></span></label><label class="form__label form__label--checkbox"><input name="emailGiftNotificationEnabled" ng-model="PrivacySettingsFormController.privacySettings.emailGiftNotificationEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_NOTIFICATION_GIFT_LABEL"></span></label><label class="form__label form__label--checkbox"><input name="emailRoomMessageNotificationEnabled" ng-model="PrivacySettingsFormController.privacySettings.emailRoomMessageNotificationEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_NOTIFICATION_ROOM_LABEL"></span></label><label class="form__label form__label--checkbox"><input name="emailGroupNotificationEnabled" ng-model="PrivacySettingsFormController.privacySettings.emailGroupNotificationEnabled" type="checkbox" class="form__checkbox"> <span translate="SETTINGS_ENABLE_NOTIFICATION_GROUP_LABEL"></span></label></div></fieldset><div class="form__footer"><button ng-disabled="PrivacySettingsFormController.sendInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_SAVE"></button></div></form>'),
  6530. e.put("settings/privacy-settings/privacy-settings.html", '<h2 translate="PRIVACY_SETTINGS_TITLE"></h2><habbo-privacy-settings-form privacy-settings="PrivacySettingsController.privacySettings"></habbo-privacy-settings-form>'),
  6531. e.put("settings/password-change/password-change-form.html", '<form ng-submit="PasswordChangeFormController.update()" name="changePasswordForm" autocomplete="off" novalidate class="form form--left"><habbo-password-current password-current="PasswordChangeFormController.passwords.currentPassword"></habbo-password-current><habbo-password-new is-new="true" password-new="PasswordChangeFormController.passwords.password" password-new-repeated="PasswordChangeFormController.passwords.passwordRepeated" user-name="{{:: PasswordChangeFormController.user.name}}" user-email="{{:: PasswordChangeFormController.user.email}}"></habbo-password-new><div class="form__footer"><button ng-disabled="PasswordChangeFormController.updateInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_CHANGE"></button></div></form>'),
  6532. e.put("settings/password-change/password-change.html", '<h2 translate="PASSWORD_CHANGE_TITLE"></h2><habbo-password-change-form></habbo-password-change-form>'),
  6533. e.put("security/login/login-form.html", '<form ng-submit="LoginController.login()" name="loginForm" novalidate habbo-shake class="login-form__form"><fieldset class="form__fieldset login-form__fieldset"><div class="form__field"><input name="email" type="email" ng-model="LoginController.email" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required habbo-email habbo-remote-data="\'credentials\'" autofocus placeholder="{{\'FORM_EMAIL_LABEL\' | translate}}" class="form__input login-form__input"></div></fieldset><fieldset class="form__fieldset login-form__fieldset"><div class="form__field"><input name="password" type="password" ng-model="LoginController.password" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required habbo-remote-data="\'credentials\'" placeholder="{{\'FORM_PASSWORD_LABEL\' | translate}}" class="form__input login-form__input"></div><habbo-claim-password class="form__helper login-form__helper"></habbo-claim-password></fieldset><button ng-disabled="LoginController.loginInProgress" type="submit" class="login-form__button" translate="LOGIN_BUTTON"></button></form><div class="login-form__social"><habbo-facebook-connect on-login="LoginController.onLogin()" type="large" translation-key="FACEBOOK_LOGIN"></habbo-facebook-connect><habbo-facebook-connect on-login="LoginController.onLogin()" type="small"></habbo-facebook-connect><div class="login-form__rpx"><habbo-rpx-login></habbo-rpx-login></div></div><div class="login-form__register"><a href="/registration" habbo-android-download-link habbo-ios-download-link translate="LOGIN_REGISTER"></a></div>'),
  6534. e.put("security/login/login-modal.html", '<div class="login"><button ng-click="$dismiss()" class="modal__close"></button><h3 translate="LOGIN" class="modal__title"></h3><div class="modal__content"><habbo-login-form on-login="$close()"></habbo-login-form></div></div>'),
  6535. e.put("security/safety-lock/safety-answering-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="SAFETY_LOCK_TITLE" class="modal__title"></h3><div class="modal__content"><habbo-safety-answering-form data="SafetyAnsweringController.data" questions="SafetyAnsweringController.questions" target-action="SafetyAnsweringController.targetAction(SafetyAnsweringController.data)" on-success="$close()" on-cancel="$dismiss()"></habbo-safety-answering-form></div>'),
  6536. e.put("security/safety-lock/safety-lock-form.html", '<form ng-submit="unlock()" name="safetyLockForm" novalidate class="form"><p translate="SAFETY_LOCK_ANSWER"></p><div ng-if="safetyLockForm.$error.remoteDataAnswer" class="form__message form__message--error" translate="ERROR_SAFETY_LOCK_ANSWER"></div><fieldset class="form__fieldset"><label for="safety-lock-answer1" class="form__label" translate="{{questions[0].questionKey}}"></label><div class="form__field"><input id="safety-lock-answer1" name="answer1" type="password" ng-model="answers.answer1" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required habbo-remote-data="\'answer\'" habbo-password-toggle-mask autocomplete="off" class="form__input"><div ng-if="safetyLockForm.answer1.$error.required && (!safetyLockForm.answer1.$pristine || safetyLockForm.$submitted)" class="form__popover form__popover--error">{{ \'ERROR_FIELD_REQUIRED\' | translate }}</div></div></fieldset><fieldset class="form__fieldset"><label for="safety-lock-answer2" class="form__label" translate="{{questions[1].questionKey}}"></label><div class="form__field"><input id="safety-lock-answer2" name="answer2" type="password" ng-model="answers.answer2" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required habbo-remote-data="\'answer\'" habbo-password-toggle-mask autocomplete="off" class="form__input"><div ng-if="safetyLockForm.answer1.$error.required && (!safetyLockForm.answer2.$pristine || safetyLockForm.$submitted)" class="form__popover form__popover--error">{{ \'ERROR_FIELD_REQUIRED\' | translate }}</div></div></fieldset><div ng-if="isTrustedLocationEnabled"><fieldset class="form__fieldset form__fieldset--box"><div class="form__field"><label for="trust-once" class="form__label form__label--radiobutton"><input id="trust-once" ng-model="answers.trust" ng-value="false" type="radio" class="form__radiobutton"> <span translate="SAFETY_LOCK_SET_TRUSTED_ONCE"></span></label></div><div class="form__field"><label for="trust-save" class="form__lable form__label--radiobutton"><input id="trust-save" ng-model="answers.trust" ng-value="true" type="radio" class="form__radiobutton"> <span translate="SAFETY_LOCK_SET_TRUSTED_SAVE"></span></label></div></fieldset></div><div class="form__footer"><a ng-click="onCancel()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="unlockingInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_UNLOCK"></button></div></form>'),
  6537. e.put("security/safety-lock/safety-lock-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="SAFETY_LOCK_TITLE" class="modal__title"></h3><div class="modal__content"><habbo-safety-lock-form questions="SafetyLockController.questions" on-unlock="$close()" on-cancel="$dismiss()"></habbo-safety-lock-form></div>'),
  6538. e.put("shop/credit-icon/credit-icon.html", "<div ng-class=\"[{ 'credit-icon--double': CreditIconController.isDouble },\n 'credit-icon--' + CreditIconController.getIndex(CreditIconController.amount) ]\" class=\"credit-icon\"></div>"),
  6539. e.put("shop/credit-card-form/credit-card-form.html", '<form ng-submit="CreditCardController.markActiveAndSubmit({ data: CreditCardController.card })" name="creditCardForm" novalidate class="form credit-card-form"><p translate="SHOP_CREDIT_CARD_INSTRUCTION"></p><fieldset class="form__fieldset form__fieldset--inline credit-card-form__input-section"><div class="form__field"><label for="card-number" class="form__label" translate="SHOP_CREDIT_CARD_NUMBER"></label><input id="card-number" name="number" ng-model="CreditCardController.card.number" class="form__input" ng-required="true" cc-number cc-type="cardType" cc-format="true"><div ng-if="creditCardForm.number.$invalid && !creditCardForm.number.$pristine && creditCardForm.number.$touched" class="form__popover form__popover--error form__popover--inline" ng-required="true"><p translate="SHOP_CREDIT_CARD_INVALID_NUMBER"></p></div></div><div class="credit-card-form__expiry-cvc-row form__fieldset"><div class="form__field credit-card-form__expiry-field"><label class="form__label" translate="SHOP_CREDIT_CARD_EXPIRY_DATE"></label><div cc-exp class="credit-card-form__expiry"><input name="month" ng-model="CreditCardController.card.expMonth" cc-exp-month ng-required="true" class="form__input credit-card-form__expiry-input" placeholder="{{\'SHOP_CREDIT_CARD_EXPIRY_HINT_MM\' | translate}}"> <span class="credit-card-form__expiry-slash">/</span> <input name="year" ng-model="CreditCardController.card.expYear" cc-exp-year ng-required="true" class="form__input credit-card-form__expiry-input" placeholder="{{\'SHOP_CREDIT_CARD_EXPIRY_HINT_YY\' | translate}}"></div><div ng-if="(creditCardForm.month.$invalid && !creditCardForm.month.$pristine && creditCardForm.month.$touched)\n || (creditCardForm.year.$invalid && !creditCardForm.year.$pristine && creditCardForm.year.$touched)\n || (creditCardForm.$error.ccExp && !(creditCardForm.month.$pristine || creditCardForm.year.$pristine) && creditCardForm.month.$touched && creditCardForm.year.$touched)" class="form__popover form__popover--error form__popover--inline"><p translate="SHOP_CREDIT_CARD_INVALID_DATE"></p></div></div><div class="form__field credit-card-form__cvc-field"><label class="form__label" translate="SHOP_CREDIT_CARD_CVC"></label><input name="cvc" ng-required="true" ng-model="CreditCardController.card.cvc" class="form__input credit-card-form__cvc-input" cc-cvc> <img src="https://habboo-a.akamaihd.net/habbo-web/america/nl/assets/images/cc_cvc_instruction.345e33e4.png" class="credit-card-form__cvc-icon"><div ng-if="creditCardForm.cvc.$invalid && !creditCardForm.cvc.$pristine && creditCardForm.cvc.$touched" class="form__popover form__popover--error form__popover--inline"><p translate="SHOP_CREDIT_CARD_INVALID_CVC"></p></div></div></div><div class="form__field"><label class="form__label" translate="SHOP_CREDIT_CARD_NAME"></label><input name="name" ng-model="CreditCardController.card.name" class="form__input" ng-required="true"></div><h3 translate="SHOP_SMALLPRINT_TITLE"></h3><p class="payment-steps__legal" translate="SHOP_CREDIT_CARD_SMALLPRINT"></p></fieldset><button ng-disabled="CreditCardController.paymentInProgress || creditCardForm.$invalid" type="submit" translate="SHOP_PAYMENT_BUTTON" class="payment-methods__button payment-button"></button></form>'),
  6540. e.put("shop/credit-title/credit-title.html", '<span ng-if="CreditTitleController.isDouble" translate="DOUBLE_CREDITS_PREFIX" class="credit-title__prefix"></span> <span translate="CREDITS_AMOUNT" translate-values="{ value: CreditTitleController.amount }"></span>'),
  6541. e.put("shop/prepaid/prepaid.html", '<header class="shop__header"><h1 translate="SHOP_PREPAID_TITLE" class="shop__header__title"></h1><habbo-shop-countries ng-if="PrepaidController.countries.length > 1" country="PrepaidController.country" countries="PrepaidController.countries" class="shop__header__country"></habbo-shop-countries></header><section><article class="main static-content"><habbo-compile data="PrepaidController.page"></habbo-compile></article><habbo-purse habbo-require-session class="aside aside--box"></habbo-purse><aside habbo-require-session class="aside aside--box"><h3 translate="SHOP_REDEEM_TITLE"></h3><habbo-voucher-redeem></habbo-voucher-redeem></aside><habbo-web-pages key="common/box_account_issues" class="aside aside--box"></habbo-web-pages></section>'),
  6542. e.put("shop/earn-credits/earn-credits.html", '<section class="main"><habbo-web-pages key="store/earn-credits/earn-credits"></habbo-web-pages><habbo-earn-credits-frame offer-wall-url="{{:: EarnCreditsController.offerWallUrl.url }}"></habbo-earn-credits-frame></section><habbo-purse habbo-require-session class="aside aside--box aside--push-down"></habbo-purse><habbo-web-pages key="store/earn-credits/box_help" class="aside aside--box"></habbo-web-pages>'),
  6543. e.put("shop/shop-footer/shop-footer.html", '<footer class="shop-footer"><section class="main shop-footer__main"><h3 translate="SHOP_NOTICE_TITLE" class="shop-footer__title"></h3><p translate="SHOP_NOTICE_CONTENTS" class="shop-footer__text"></p></section><aside class="aside shop-footer__aside"><h4 translate="SHOP_NOTICE_PROVIDER_TITLE" class="shop-footer__title--aside"></h4><p translate="SHOP_NOTICE_PROVIDER" class="shop-footer__text"></p><a ng-href="{{\'FOOTER_SUPPORT_LINK\' | translate | zendeskRedirectUrl}}" target="_blank" translate="FOOTER_SUPPORT" class="shop-footer__link"></a></aside></footer>'),
  6544. e.put("shop/shop-countries/shop-countries.html", '<label for="shop-country" class="form__label form__label--inline"><small translate="SHOP_COUNTRY_LABEL" translate-values="{ countryName: ShopCountriesController.country.name }"></small></label><select id="shop-country" ng-model="ShopCountriesController.country" ng-options="country.name for country in ShopCountriesController.countries track by country.countryCode" class="form__select form__select--inline"></select>'),
  6545. e.put("shop/purse/purse.html", '<aside><h3 translate="SHOP_PURSE_TITLE"></h3><div class="purse"><div class="purse__columns"><div class="purse__column"><div translate="SHOP_PURSE_CREDITS" translate-values="{ creditBalance: PurseController.purse.creditBalance }" class="purse__item purse__item--credits"></div><div translate="SHOP_PURSE_DIAMONDS" translate-values="{ diamondBalance: PurseController.purse.diamondBalance }" class="purse__item purse__item--diamonds"></div></div><div class="purse__column"><div class="purse__item purse__item--habbo-club"><span ng-if="PurseController.purse.habboClubDays !== 0" translate="SHOP_PURSE_HC_DAYS" translate-values="{ habboClubDays: PurseController.purse.habboClubDays }"></span> <span ng-if="PurseController.purse.habboClubDays === 0" translate="SHOP_PURSE_NO_HC"></span></div><div class="purse__item purse__item--builders-club"><span ng-if="PurseController.purse.buildersClubDays !== 0" translate="SHOP_PURSE_BC_DAYS" translate-values="{ buildersClubDays: PurseController.purse.buildersClubDays }"></span> <span ng-if="PurseController.purse.buildersClubDays === 0" translate="SHOP_PURSE_NO_BC"></span></div></div></div></div><div class="purse__footer"><a href="/hotel?link=habboUI/open/hccenter" class="purse__hc-center" translate="SHOP_PURSE_HC_LINK"></a></div></aside>'),
  6546. e.put("shop/transactions/transactions-list.html", '<div ng-if="TransactionsListController.transactions.length > 0"><habbo-transactions-history transactions="TransactionsListController.transactions" limit-to="{{TransactionsListController.transactionLimit}}"></habbo-transactions-history><div class="transactions__footer"><p class="transactions__notice" translate="TRANSACTIONS_NOTICE"></p><button ng-if="!TransactionsListController.hideShowAll\n && TransactionsListController.transactions.length > TransactionsListController.transactionLimit" ng-click="TransactionsListController.showAll()" class="transactions__button" translate="TRANSACTIONS_SHOW_ALL"></button></div></div><habbo-empty-results ng-if="TransactionsListController.transactions.length === 0" translation-key="TRANSACTIONS_EMPTY"></habbo-empty-results>'),
  6547. e.put("shop/transactions/transactions.html", '<header class="shop__header"><h1 class="shop__header__title shop__header__title--single" translate="SHOP_TRANSACTIONS_TITLE"></h1></header><section><habbo-transactions-list transactions="TransactionsController.items" class="main"></habbo-transactions-list><habbo-purse class="aside aside--box"></habbo-purse><habbo-web-pages key="common/box_account_issues" class="aside aside--box"></habbo-web-pages></section>'),
  6548. e.put("shop/subscriptions/subscriptions.html", '<header class="shop__header"><h1 translate="SHOP_SUBSCRIPTIONS_TITLE" class="shop__header__title"></h1><habbo-shop-countries ng-if="SubscriptionsController.subscriptions.countries.length > 1" country="SubscriptionsController.subscriptions.selectedCountry" countries="SubscriptionsController.subscriptions.countries" class="shop__header__country"></habbo-shop-countries></header><section><div class="main"><habbo-subscription ng-repeat="item in SubscriptionsController.subscriptions.items" item="item"></habbo-subscription></div><habbo-purse class="aside aside--box"></habbo-purse><aside class="aside aside--box"><h3 translate="SHOP_REDEEM_TITLE"></h3><habbo-voucher-redeem></habbo-voucher-redeem></aside><habbo-web-pages key="common/box_mall_info" class="aside aside--box"></habbo-web-pages></section>'),
  6549. e.put("shop/store/store.html", '<header class="shop__header"><h1 translate="SHOP_TITLE" class="shop__header__title"></h1><habbo-shop-countries ng-if="StoreController.countries.length > 1" country="StoreController.inventory.country" countries="StoreController.countries" class="shop__header__country"></habbo-shop-countries></header><section><div class="main"><habbo-targeted-offer offer="StoreController.offer" ng-if="StoreController.offer"></habbo-targeted-offer><habbo-category-filter ng-show="StoreController.inventory.paymentCategories.length > 0" payment-categories="StoreController.inventory.paymentCategories" selected-category="StoreController.selectedCategory"></habbo-category-filter><habbo-inventory inventory="StoreController.inventory" selected-category="{{StoreController.selectedCategory}}"></habbo-inventory></div><habbo-purse habbo-require-session class="aside aside--box"></habbo-purse><aside habbo-require-session class="aside aside--box"><h3 translate="SHOP_REDEEM_TITLE"></h3><habbo-voucher-redeem></habbo-voucher-redeem></aside><habbo-web-pages key="common/box_mall_info" class="aside aside--box"></habbo-web-pages></section>'),
  6550. e.put("shop/voucher-redeem/voucher-redeem.html", '<form ng-submit="VoucherRedeemController.redeem()" name="voucherRedeemForm" novalidate class="form"><button ng-disabled="VoucherRedeemController.redeemInProgress" type="submit" translate="SHOP_REDEEM_BUTTON" class="form__submit form__submit--inline"></button><fieldset class="form__fieldset form__fieldset--inline"><div class="form__field"><input placeholder="{{\'SHOP_REDEEM_PLACEHOLDER\' | translate}}" name="voucherCode" ng-model="VoucherRedeemController.voucherCode" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" ng-pattern="/^[a-z0-9]{8}$/i" required autocomplete="off" habbo-remote-data="[\'nonexistent\', \'redeemed\', \'failed\']" class="form__input voucher-redeem__input"><div ng-if="voucherRedeemForm.voucherCode.$invalid && (!voucherRedeemForm.voucherCode.$pristine || voucherRedeemForm.$submitted)" ng-messages="voucherRedeemForm.voucherCode.$error" class="form__popover form__popover--error form__popover--inline"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div><div ng-message="pattern">{{\'ERROR_VOUCHER_CODE_PATTERN\' | translate}}</div><div ng-message="remoteDataNonexistent">{{\'ERROR_VOUCHER_CODE_NONEXISTENT\' | translate}}</div><div ng-message="remoteDataRedeemed">{{\'ERROR_VOUCHER_CODE_REDEEMED\' | translate}}</div><div ng-message="remoteDataFailed">{{\'ERROR_VOUCHER_CODE_FAILED\' | translate}}</div></div></div></fieldset><small class="form__helper" translate="PREPAID_ORDER_INSTRUCTION"></small></form>'),
  6551. e.put("common/columns/card/card.html", '<div class="card"><div class="card__content"><a habbo-creation-href="CardController.item" class="card__link"><div class="card__image__aligner"><img ng-src="{{:: CardController.item.url}}" ng-class="{\n \'card__image--selfie\': CardController.item.type === \'SELFIE\',\n \'card__image--photo\': CardController.item.type === \'PHOTO\',\n \'card__image--wide\': CardController.item.type === \'USER_CREATION\' && CardController.item.contentHeight < CardController.item.contentWidth,\n \'card__image--tall\': CardController.item.type === \'USER_CREATION\' && CardController.item.contentHeight >= CardController.item.contentWidth\n }" class="card__image" alt="{{:: CardController.item.title}}"></div></a><div class="card__meta"><h5 ng-if="CardController.item.title" class="card__title">{{:: CardController.item.title}}</h5><time class="card__date">{{:: CardController.item.time | date: \'shortDate\'}}</time><habbo-like data="CardController.item" class="card__like"></habbo-like></div></div><div ng-transclude></div></div>'),
  6552. e.put("common/columns/columns-channel/columns-channel.html", '<div><div class="columns" ng-init="limit = 16" infinite-scroll="limit = limit + 8" infinite-scroll-distance="1"><habbo-card ng-repeat="card in ColumnsChannelController.items | limitTo: limit" item="card" class="columns__column"><habbo-avatar class="card__creator" user="{{:: card.creator_name}}"></habbo-avatar></habbo-card></div></div>'),
  6553. e.put("common/columns/columns-profile/columns-profile.html", '<div><div ng-init="limit = 16" infinite-scroll="limit = limit + 8" infinite-scroll-distance="1" class="columns"><habbo-card ng-repeat="card in ColumnsProfileController.items | limitTo: limit" item="card" class="columns__column"></habbo-card></div></div>'),
  6554. e.put("common/header/hotel-button/hotel-button.html", '<a href="/hotel" class="hotel-button" id="ga-linkid-hotel"><span class="hotel-button__text" translate="NAVIGATION_HOTEL"></span></a>'),
  6555. e.put("common/ad-unit/ad-double-click/ad-double-click.html", '<div ng-dfp-ad="{{:: AdDoubleClickController.id}}" translation="{{ \'THIRD_PARTY_AD\' | translate }}" class="ad-double-click"></div>'),
  6556. e.put("common/form/captcha/captcha.html", '<fieldset class="form__fieldset captcha__wrapper"><div class="form__field"><no-captcha g-recaptcha-response="CaptchaController.captchaToken" control="CaptchaController.noCaptchaController" expired-callback="CaptchaController.onExpire" class="captcha"></no-captcha><input name="captchaToken" ng-model="CaptchaController.captchaToken" required type="hidden"><div ng-if="CaptchaController.FormController.captchaToken.$invalid\n && (!CaptchaController.FormController.captchaToken.$pristine\n || CaptchaController.FormController.$submitted)" class="form__popover form__popover--error form__popover--captcha" translate="ERROR_CAPTCHA_REQUIRED"></div></div></fieldset>'),
  6557. e.put("common/header/header-ad/header-ad.html", '<div ng-if="HeaderAdController.hasAd" class="header-ad"><habbo-ad-unit unit="leaderboard" class="header-ad__ad"></habbo-ad-unit></div>'),
  6558. e.put("common/header/navigation/navigation.html", '<nav class="navigation"><ul class="navigation__menu"><li class="navigation__item"><a href="/" ng-class="{ \'navigation__link--active\': NavigationController.active === \'home\' }" class="navigation__link navigation__link--home" translate="NAVIGATION_HOME" id="ga-linkid-home"></a></li><li class="navigation__item"><a href="/community" ng-class="{ \'navigation__link--active\': NavigationController.active === \'community\' }" class="navigation__link navigation__link--community" translate="NAVIGATION_COMMUNITY" id="ga-linkid-community"></a></li><li class="navigation__item"><a href="/shop" ng-class="{ \'navigation__link--active\': NavigationController.active === \'shop\' }" class="navigation__link navigation__link--shop" translate="NAVIGATION_SHOP" id="ga-linkid-shop"></a></li><li class="navigation__item"><a href="/playing-habbo" ng-class="{ \'navigation__link--active\': NavigationController.active === \'playingHabbo\' }" class="navigation__link navigation__link--playing-habbo" translate="NAVIGATION_PLAYING_HABBO" id="ga-linkid-playing-habbo"></a></li><li habbo-require-session class="navigation__item navigation__item--aside navigation__item--hotel"><habbo-hotel-button habbo-require-flash></habbo-hotel-button></li></ul></nav>'),
  6559. e.put("common/header/user-menu/user-menu.html", '<div ng-init="toggle = false;" habbo-false-on-outside-click="toggle" class="user-menu"><div class="user-menu__header"><a ng-click="toggle = !toggle;" class="user-menu__toggle"><div class="user-menu__name__wrapper"><div class="user-menu__name" ng-class="{ \'user-menu__name--open\': toggle }">{{:: UserMenuController.user.name}}</div></div><habbo-imager figure="{{:: UserMenuController.user.figureString}}" name="{{:: UserMenuController.user.name}}" size="bighead" class="user-menu__avatar"></habbo-imager></a></div><ul ng-hide="!toggle" class="user-menu__list ng-hide"><li class="user-menu__item"><a ng-href="/profile/{{:: UserMenuController.user.name | encodeURIComponent}}" ng-class="{ \'user-menu__link--active\': UserMenuController.isMyProfileActive() }" class="user-menu__link user-menu__link--profile" translate="NAVIGATION_PROFILE"></a></li><li class="user-menu__item"><a href="/settings" ng-class="{ \'user-menu__link--active\': UserMenuController.isSettingsActive() }" class="user-menu__link user-menu__link--settings" translate="NAVIGATION_SETTINGS"></a></li><li class="user-menu__item"><a ng-href="{{\'HELP_URL\' | translate | zendeskRedirectUrl}}" class="user-menu__link user-menu__link--help" target="_blank" translate="NAVIGATION_HELP"></a></li><li class="user-menu__item"><a ng-click="UserMenuController.logout()" class="user-menu__link user-menu__link--logout" translate="NAVIGATION_LOGOUT"></a></li></ul></div>'),
  6560. e.put("common/form/email-address/email-address.html", '<fieldset class="form__fieldset"><div ng-transclude></div><div class="form__field"><input id="email-address" name="emailAddress" type="email" ng-model="EmailAddressController.emailAddress" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required habbo-email habbo-remote-data="[\'emailInvalid\', \'emailUsedInRegistration\', \'emailUsedInChange\']" autocomplete="off" class="form__input"><div ng-if="EmailAddressController.FormController.emailAddress.$invalid\n && (!EmailAddressController.FormController.emailAddress.$pristine\n || EmailAddressController.FormController.$submitted)" ng-messages="EmailAddressController.FormController.emailAddress.$error" class="form__popover form__popover--error"><div ng-message="email, remoteDataEmailInvalid">{{ \'ERROR_EMAIL_INVALID\' | translate }}</div><div ng-message="required">{{ \'ERROR_FIELD_REQUIRED\' | translate }}</div><div ng-message="remoteDataEmailUsedInRegistration">{{ \'ERROR_EMAIL_REGISTRATION_USED\' | translate }}</div><div ng-message="remoteDataEmailUsedInChange">{{ \'ERROR_EMAIL_CHANGE_USED\' | translate }}</div></div></div></fieldset>'),
  6561. e.put("common/form/search/search.html", '<input ng-model="SearchController.query" class="form__input search__input" placeholder="{{ \'SEARCH_PLACEHOLDER\' | translate }}"> <button class="search__clear" ng-click="SearchController.query = \'\';"></button>'),
  6562. e.put("common/form/password-current/password-current.html", '<fieldset class="form__fieldset"><label for="password-current" translate="CURRENT_PASSWORD_LABEL" class="form__label"></label><div class="form__field"><input id="password-current" name="passwordCurrent" type="password" ng-model="PasswordCurrentController.passwordCurrent" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required habbo-password-toggle-mask habbo-remote-data="\'password\'" autocomplete="off" class="form__input"><div ng-if="PasswordCurrentController.FormController.passwordCurrent.$invalid\n && (!PasswordCurrentController.FormController.passwordCurrent.$pristine\n || PasswordCurrentController.FormController.$submitted)" ng-messages="PasswordCurrentController.FormController.passwordCurrent.$error" class="form__popover form__popover--error"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div><div ng-message="remoteDataPassword">{{\'ERROR_INCORRECT_PASSWORD\' | translate}}</div></div></div></fieldset>'),
  6563. e.put("common/form/password-new/password-new.html", '<fieldset class="form__fieldset form__fieldset--box form__fieldset--box-top"><label for="password-new" class="form__label" translate="{{:: PasswordNewController.isNew === \'true\' ? \'NEW_PASSWORD_LABEL\' : \'PASSWORD_LABEL\'}}"></label><p translate="PASSWORD_CHANGE_HELP"></p><div class="form__field"><input id="password-new" name="passwordNew" type="password" ng-model="PasswordNewController.passwordNew" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required ng-maxlength="32" ng-minlength="6" habbo-password-email="{{:: PasswordNewController.userEmail}}" habbo-password-name="{{:: PasswordNewController.userName}}" habbo-password-pattern habbo-password-toggle-mask habbo-remote-data="[\'passwordName\', \'passwordEmail\']" autocomplete="off" class="form__input"><div ng-if="(PasswordNewController.FormController.passwordNew.$invalid\n && (!PasswordNewController.FormController.passwordNew.$pristine\n || PasswordNewController.FormController.$submitted))\n || (!PasswordNewController.FormController.passwordNew.$pristine\n && PasswordNewController.FormController.passwordNew.$valid)" ng-messages="PasswordNewController.FormController.passwordNew.$error" ng-class="{ \'form__popover--error\': PasswordNewController.FormController.passwordNew.$invalid }" class="form__popover"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div><habbo-password-strength ng-if="!PasswordNewController.FormController.passwordNew.$error.required" model-value="PasswordNewController.passwordNew" model-name="passwordNew"><div ng-message="maxlength">{{\'ERROR_PASSWORD_MAX_LENGTH\' | translate}}</div><div ng-message="minlength">{{\'ERROR_PASSWORD_MIN_LENGTH\' | translate}}</div><div ng-message="passwordPattern">{{\'ERROR_PASSWORD_PATTERN\' | translate}}</div><div ng-message="passwordName, remoteDataPasswordName">{{\'ERROR_PASSWORD_CONTAINS_NAME\' | translate}}</div><div ng-message="passwordEmail, remoteDataPasswordEmail">{{\'ERROR_PASSWORD_CONTAINS_EMAIL\' | translate}}</div><div ng-message="passwordEmail, remoteDataPasswordEmail">{{\'ERROR_PASSWORD_CONTAINS_EMAIL\' | translate}}</div></habbo-password-strength></div></div></fieldset><fieldset class="form__fieldset form__fieldset--box form__fieldset--box-bottom"><label for="password-new-repeated" class="form__label" translate="PASSWORD_REPEAT_LABEL"></label><div class="form__field"><input id="password-new-repeated" name="passwordNewRepeated" type="password" ng-model="PasswordNewController.passwordNewRepeated" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required habbo-matches="passwordNew" habbo-password-toggle-mask autocomplete="off" class="form__input"><div ng-if="PasswordNewController.FormController.passwordNew.$valid\n && PasswordNewController.FormController.passwordNewRepeated.$invalid" ng-messages="PasswordNewController.FormController.passwordNewRepeated.$error" class="form__popover form__popover--error"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div><div ng-message="matches">{{\'ERROR_PASSWORDS_NOT_MATCHING\' | translate}}</div></div></div></fieldset>'),
  6564. e.put("home/messaging/discussions/discussions.html", '<ul ng-if="DiscussionsController.items.length > 0"><li ng-repeat="discussion in DiscussionsController.items" class="discussions__item"><div class="discussions__participant"><habbo-avatar user="{{:: DiscussionsController.getParticipant(discussion.participants).name}}" big="true"></habbo-avatar></div><div class="discussions__wrapper"><h6 ng-if="discussion.messages.length > 0" am-time-ago="discussion.latestTime" class="discussions__timeago"></h6><ul><li ng-repeat="message in discussion.messages | limitTo: 3" class="discussions__message"><p class="discussions__text">{{:: message.message}}</p><time class="discussions__date"><small>{{:: message.sendTime | date: \'medium\'}}</small></time></li></ul><a ng-href="/hotel?link=friendlist/openchat/{{discussion.discussionId}}" habbo-require-flash translate="DISCUSSIONS_REPLY" class="discussions__reply"></a></div></li></ul><habbo-empty-results ng-if="DiscussionsController.items.length === 0" translation-key="DISCUSSIONS_EMPTY"></habbo-empty-results>'),
  6565. e.put("hotel/client/client-error/client-error.html", '<div class="client-error"><h1 class="client-error__title" translate="CLIENT_ERROR_TITLE"></h1><p translate="CLIENT_ERROR_FLASH"></p><div class="client-error__downloads"><a ng-href="{{\'CLIENT_ERROR_FLASH_LINK\' | translate}}" target="_blank" class="client-error__flash"></a></div><p translate="CLIENT_ERROR_MOBILE"></p><div class="client-error__downloads"><a ng-href="{{:: ClientErrorController.appStoreUrl}}" target="_blank" class="client-error__appstore"></a> <a ng-href="{{:: ClientErrorController.googlePlayUrl}}" target="_blank" class="client-error__googleplay"></a></div></div>'),
  6566. e.put("hotel/client/client-closed/client-closed.html", "<habbo-hotel-closed></habbo-hotel-closed>"),
  6567. e.put("hotel/client/client-reload/client-reload.html", '<h1 translate="RELOAD_TITLE"></h1><button ng-click="ClientReloadController.reload()" class="client-reload__button" translate="RELOAD_BUTTON"></button>'),
  6568. e.put("hotel/client/interstitial/interstitial.html", '<div ng-if="InterstitialController.started" ng-class="{ \'interstitial--visible\': InterstitialController.loaded }" class="interstitial"><div class="interstitial__stage"><iframe ng-src="{{InterstitialController.habboWebAdsUrl + \'interstitial.\' + InterstitialController.lang + \'.html\'}}" class="interstitial__ad"></iframe></div><p class="interstitial__text" translate="INTERS_DESCRIPTION"></p><p class="interstitial__text" translate="INTERS_INSTRUCTION"></p></div>'),
  6569. e.put("home/register-banner/local-register-banner/local-register-banner.html", '<small ng-if="LocalRegisterBannerController.site" class="local-register-banner">{{ \'LOCAL_REGISTER_BANNER_\' + LocalRegisterBannerController.site.localization | translate }} <a ng-href="{{LocalRegisterBannerController.site.href}}">{{LocalRegisterBannerController.site.title}}</a></small>'),
  6570. e.put("profile/creation/photo-delete/photo-delete.html", '<button type="button" ng-click="PhotoDeleteController.delete()" class="photo-delete">{{\'CREATION_DELETE\' | translate}}</button>'),
  6571. e.put("home/news/moderation-notification/moderation-notification.html", '<habbo-message-container ng-if="ModerationNotificationController.moderations.length > 0" type="exclamation" class="moderation-notification static-content"><h3 translate="MODERATION_MESSAGE_TITLE"></h3><p translate="MODERATION_MESSAGE_TEXT" translate-values="{moderationCount: ModerationNotificationController.moderations.length}"></p><ul><li ng-repeat="moderation in ModerationNotificationController.moderations">{{:: moderation.createdAt | date: "fullDate" }}</li></ul><p translate="MODERATION_MESSAGE_INSTRUCTIONS"></p></habbo-message-container>'),
  6572. e.put("profile/item-lists/room-icon/room-icon.html", '<div class="room-icon"><img habbo-show-on-load habbo-remove-on-error ng-src="{{:: RoomIconController.url}}" class="room-icon__thumbnail"></div>'),
  6573. e.put("profile/creation/report/report-form.html", '<form ng-submit="ReportFormController.send()" name="reportForm" novalidate class="form"><p translate="REPORT_EXPLANATION"></p><img ng-src="{{:: ReportFormController.creation.url}}" class="report-form__creation"><fieldset class="form__fieldset form__fieldset--box"><p class="report-form__description" translate="REPORT_REMOVE_BECAUSE"></p><div ng-repeat="reason in ReportFormController.reasonCodes" class="form__field"><label class="form__label form__label--radiobutton"><input name="reportReason" ng-model="ReportFormController.creation.reportReason" ng-value="reason" required type="radio" class="form__radiobutton"> <span translate="REPORT_REASON_{{reason}}"></span></label></div></fieldset><div ng-if="reportForm.$invalid && reportForm.$submitted" ng-messages="reportForm.$error" class="form__popover form__popover--error"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div></div><p translate="REPORT_REPORT_FAIRLY"></p><div class="form__footer"><a ng-click="ReportFormController.onCancel()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button type="submit" class="form__submit report-form__submit" ng-disabled="ReportFormController.sendInProgress" translate="REPORT_SUBMIT"></button></div></form>'),
  6574. e.put("profile/creation/report/report-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h4 class="modal__title" translate="REPORT_TITLE"></h4><div class="modal__content"><habbo-report-form creation="ReportController.creation" on-success="$close()" on-cancel="$dismiss()"></habbo-report-form></div>'),
  6575. e.put("profile/creation/report/report.html", '<a ng-click="ReportController.click()" class="report"><i class="report__icon icon icon--report"></i></a>'),
  6576. e.put("settings/email-change/activation-status/activation-status.html", '<habbo-message-container ng-if="ActivationStatusController.user.emailVerified" type="check"><h3 translate="EMAIL_VERIFIED_TITLE" class="activation-status__title"></h3><p translate="EMAIL_VERIFIED_TEXT" translate-values="{{:: ActivationStatusController.user}}" class="activation-status__text"></p></habbo-message-container><habbo-message-container ng-if="!ActivationStatusController.user.emailVerified" type="exclamation"><h3 translate="ACTIVATION_RESEND_TITLE" class="activation-status__title"></h3><p translate="ACTIVATION_RESEND_TEXT" translate-values="{{:: ActivationStatusController.user}}" class="activation-status__text"></p><div class="activation-status__controls"><button ng-click="ActivationStatusController.resend()" ng-disabled="ActivationStatusController.resendInProgress || ActivationStatusController.isSent" class="activation-status__submit" translate="ACTIVATION_RESEND_BUTTON"></button></div></habbo-message-container>'),
  6577. e.put("settings/avatar-selection/avatar-search/avatar-search.html", '<habbo-search query="query"></habbo-search><ul class="avatar-search__avatars"><habbo-avatar-selector ng-repeat="avatar in AvatarSearchController.avatars | byNameDescriptionOrMotto: query | orderBy: [\'-lastWebAccess\', \'name\']" avatar="avatar"></habbo-avatar-selector></ul><habbo-empty-results ng-if="(AvatarSearchController.avatars | byNameDescriptionOrMotto: query).length === 0"></habbo-empty-results>'),
  6578. e.put("settings/avatar-selection/avatar-search/avatar-selector.html", '<li ng-class="{ \'avatar-selector--selected\': AvatarSelectorController.isSelected }" class="avatar-selector"><habbo-imager figure="{{:: AvatarSelectorController.avatar.figureString}}" name="{{:: AvatarSelectorController.avatar.name}}" direction="s" action="stand" class="avatar-selector__avatar"></habbo-imager><div class="avatar-selector__content"><h4 class="avatar-selector__name">{{:: AvatarSelectorController.avatar.name}}</h4><p ng-if="AvatarSelectorController.avatar.motto" class="avatar-selector__details">{{:: AvatarSelectorController.avatar.motto}}</p><p class="avatar-selector__details avatar-selector__details--last-access">{{\'AVATAR_SELECTION_LAST_LOGIN\' | translate}} <time am-time-ago="AvatarSelectorController.avatar.lastWebAccess"></time></p><p ng-if="AvatarSelectorController.avatar.banned" class="avatar-selector__details--banned" translate="AVATAR_SELECTION_BANNED"></p></div><div ng-if="!AvatarSelectorController.isSelected && !AvatarSelectorController.avatar.banned" class="avatar-selector__select"><button habbo-require-non-staff-account-session ng-click="AvatarSelectorController.select()" ng-disabled="AvatarSelectorController.selectionInProgress" class="avatar-selector__button" translate="AVATAR_SELECTION_SELECT_BUTTON"></button></div></li>'),
  6579. e.put("settings/avatar-selection/avatar-create/avatar-create-form.html", '<form ng-submit="AvatarCreateFormController.create()" name="avatarCreateForm" novalidate class="form avatar-create-form"><fieldset class="form__fieldset"><label for="avatar-name" class="form__label" translate="AVATAR_CREATE_LABEL"></label><div class="form__field"><input id="avatar-name" name="name" ng-model="AvatarCreateFormController.name" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required ng-minlength="3" ng-maxlength="15" ng-pattern="/^[a-zA-Z0-9_\\-\\=\\?\\!@\\:\\.,\\$]+$/" ng-trim="true" habbo-avatar-name-check autofocus class="form__input"><div ng-if="avatarCreateForm.name.$invalid && (!avatarCreateForm.name.$pristine || avatarCreateForm.$submitted)" ng-messages="avatarCreateForm.name.$error" class="form__popover form__popover--error"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div><div ng-message="minlength">{{\'ERROR_FIELD_MINLENGTH\' | translate: \'{ min: 3 }\'}}</div><div ng-message="maxlength">{{\'ERROR_FIELD_MAXLENGTH\' | translate: \'{ max: 15 }\'}}</div><div ng-message="pattern">{{\'ERROR_FIELD_NAME_FORMAT\' | translate}}</div><div ng-message="name">{{\'ERROR_FIELD_NAME_TAKEN\' | translate}}</div></div></div><small class="form__helper" translate="AVATAR_CREATE_HELP"></small></fieldset><div class="form__footer"><a ng-click="AvatarCreateFormController.onCancel()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="AvatarCreateFormController.createInProgress" type="submit" translate="FORM_BUTTON_CREATE" class="form__submit"></button></div></form>'),
  6580. e.put("settings/avatar-selection/avatar-create/avatar-create-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="AVATAR_CREATE_TITLE" class="modal__title"></h3><div class="modal__content"><habbo-avatar-create-form on-create="$close()" on-cancel="$dismiss()"></habbo-avatar-create-form></div>'),
  6581. e.put("settings/avatar-selection/avatar-create/avatar-create.html", '<div class="avatar-create" ng-class="{ \'avatar-create--disabled\': avatars.length === MAX_AVATARS || (!emailVerified && !identityVerified) }"><div ng-if="avatars.length < MAX_AVATARS && identityVerified" class="avatar-create__text" translate="AVATAR_CREATE_MORE" translate-values="{ count: MAX_AVATARS - avatars.length }"></div><div ng-if="!emailVerified && !identityVerified" class="avatar-create__text" translate="AVATAR_CREATE_EMAIL_UNVERIFIED"></div><div ng-if="avatars.length === MAX_AVATARS" class="avatar-create__text" translate="AVATAR_CREATE_MAX"></div><div class="avatar-create__button__wrapper"><button ng-click="open()" ng-disabled="avatars.length === MAX_AVATARS || (!emailVerified && !identityVerified)" class="avatar-create__button" translate="AVATAR_CREATE_BUTTON"></button></div></div>'),
  6582. e.put("settings/account-security/safety-questions/safety-questions-form.html", '<form ng-submit="SafetyQuestionsFormController.save()" name="safetyQuestionsForm" novalidate class="form"><p translate="ACCOUNT_SECURITY_FORM_DESCRIPTION"></p><fieldset class="form__fieldset form__fieldset--box form__fieldset--box-top"><label for="safety-questions-question1" class="form__label" translate="ACCOUNT_SECURITY_QUESTION1_LABEL"></label><div class="form__field"><select id="safety-questions-question1" name="question1" ng-options="question.questionKey | translate for question in SafetyQuestionsFormController.questions | question: SafetyQuestionsFormController.selectedQuestion2" ng-model="SafetyQuestionsFormController.selectedQuestion1" class="form__select"></select></div><label for="safety-questions-answer1" class="form__label" translate="ACCOUNT_SECURITY_ANSWER1_LABEL"></label><div class="form__field"><input id="safety-questions-answer1" type="password" name="answer1" ng-model="SafetyQuestionsFormController.answer1" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required maxlength="255" habbo-password-toggle-mask autocomplete="off" class="form__input"><div ng-if="safetyQuestionsForm.answer1.$invalid && (!safetyQuestionsForm.answer1.$pristine || safetyQuestionsForm.$submitted)" ng-messages="safetyQuestionsForm.answer1.$error" class="form__popover form__popover--error"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div></div></div></fieldset><fieldset class="form__fieldset form__fieldset--box form__fieldset--box-bottom"><label for="safety-questions-question2" class="form__label" translate="ACCOUNT_SECURITY_QUESTION2_LABEL"></label><div class="form__field"><select id="safety-questions-question2" name="question2" ng-options="question.questionKey | translate for question in SafetyQuestionsFormController.questions | question: SafetyQuestionsFormController.selectedQuestion1" ng-model="SafetyQuestionsFormController.selectedQuestion2" class="form__select"></select></div><label for="safety-questions-answer2" class="form__label" translate="ACCOUNT_SECURITY_ANSWER2_LABEL"></label><div class="form__field"><input id="safety-questions-answer2" type="password" name="answer2" ng-model="SafetyQuestionsFormController.answer2" ng-model-options="{ updateOn: \'default blur\', debounce: { default: 500, blur: 0 } }" required maxlength="255" habbo-password-toggle-mask autocomplete="off" class="form__input"><div ng-if="safetyQuestionsForm.answer2.$invalid && (!safetyQuestionsForm.answer2.$pristine || safetyQuestionsForm.$submitted)" ng-messages="safetyQuestionsForm.answer2.$error" class="form__popover form__popover--error"><div ng-message="required">{{\'ERROR_FIELD_REQUIRED\' | translate}}</div></div></div></fieldset><habbo-password-current password-current="SafetyQuestionsFormController.password"></habbo-password-current><div class="form__footer"><a ng-click="SafetyQuestionsFormController.onCancel()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="SafetyQuestionsFormController.saveInProgress" type="submit" translate="FORM_BUTTON_SAVE" class="form__submit"></button></div></form>'),
  6583. e.put("settings/account-security/safety-questions/safety-questions-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="ACCOUNT_SECURITY_TITLE" class="modal__title"></h3><div class="modal__content"><habbo-safety-questions-form on-save="$close()" on-cancel="$dismiss()"></habbo-safety-questions-form></div>'),
  6584. e.put("security/force/force-email/force-email-form.html", '<form ng-submit="ForceEmailFormController.save()" name="forceEmailChangeForm" autocomplete="off" novalidate class="form"><p translate="FORCED_EMAIL_CHANGE_TEXT"></p><h4 class="force-email__email">{{:: ForceEmailFormController.oldEmailAddress}}</h4><habbo-email-address email-address="ForceEmailFormController.emailAddress" type="box"><label for="email-address" class="form__label" translate="FORM_NEW_EMAIL_LABEL"></label></habbo-email-address><div class="form__footer"><a ng-click="ForceEmailFormController.onDismiss()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="ForceEmailFormController.saveInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_CHANGE"></button></div></form>'),
  6585. e.put("security/force/force-email/force-email-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="FORCED_EMAIL_CHANGE_TITLE" class="modal__title"></h3><div class="modal__content"><habbo-force-email-form old-email-address="{{:: ForceEmailController.oldEmailAddress}}" on-dismiss="$dismiss()" on-success="$close(email)"></habbo-force-email-form></div>'),
  6586. e.put("security/login/captcha-modal/captcha-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="CAPTCHA_TITLE" class="modal__title"></h3><div class="modal__content"><form novalidate><p translate="CAPTCHA_DESCRIPTION"></p><habbo-captcha captcha-token="captchaToken"></habbo-captcha></form></div>'),
  6587. e.put("security/login/claim-password/claim-password-form.html", '<form ng-submit="ClaimPasswordFormController.send()" name="claimPasswordForm" novalidate class="form"><div ng-hide="ClaimPasswordFormController.sent"><div ng-transclude></div><habbo-email-address email-address="ClaimPasswordFormController.emailAddress"><label for="email-address" class="form__label" translate="FORM_ACCOUNT_EMAIL_LABEL"></label></habbo-email-address><div class="form__footer"><a ng-click="ClaimPasswordFormController.cancel()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="ClaimPasswordFormController.sendingInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_SEND"></button></div></div><div ng-show="ClaimPasswordFormController.sent" class="ng-hide"><p translate="CLAIM_PASSWORD_SUCCESS"></p><h4 class="claim-password__email">{{ClaimPasswordFormController.emailAddress}}</h4><p><b translate="CLAIM_PASSWORD_SUCCESS_NOTE"></b></p></div></form>'),
  6588. e.put("security/login/claim-password/claim-password-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 class="modal__title" translate="CLAIM_PASSWORD_TITLE"></h3><div class="modal__content"><habbo-claim-password-form cancel="$dismiss()"></habbo-claim-password-form></div>'),
  6589. e.put("security/login/claim-password/recover-password-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 class="modal__title" translate="RECOVER_PASSWORD_TITLE"></h3><div class="modal__content"><habbo-claim-password-form email-address="RecoverPasswordController.email" cancel="$dismiss()"><div class="form__message form__message--error" translate="RECOVER_PASSWORD_ERROR"></div></habbo-claim-password-form></div>'),
  6590. e.put("security/login/facebook-connect/facebook-connect.html", '<button ng-click="FacebookConnectController.fbLogin()" ng-disabled="FacebookConnectController.loginInProgress" class="facebook-connect">{{ FacebookConnectController.translationKey | translate }}</button>'),
  6591. e.put("shop/credit-card-form/credit-card-icon/credit-card-icon.html", '<span ng-if="VoucherIconController.product.icons[0]">&nbsp;<img ng-src="{{:: VoucherIconController.product.icons[0]}}" class="credit-card-icon__product"> {{:: CreditCardIconController.product.name}}</span> <span ng-if="VoucherIconController.credits">&nbsp;<i class="credit-card-icon__credits"></i> {{:: CreditCardIconController.credits}}</span>'),
  6592. e.put("shop/earn-credits/earn-credits-frame/earn-credits-frame.html", '<iframe ng-src="{{:: EarnCreditsFrameController.offerWallUrl }}" class="earn-credits-frame"></iframe>'),
  6593. e.put("security/force/force-password/force-password-form.html", '<form ng-submit="ForcePasswordFormController.change()" name="forcePasswordChangeForm" autocomplete="off" novalidate class="form"><p translate="FORCED_PASSWORD_CHANGE_TEXT"></p><habbo-password-new is-new="true" password-new="ForcePasswordFormController.passwords.password" password-new-repeated="ForcePasswordFormController.passwords.passwordRepeated"></habbo-password-new><div class="form__footer"><a ng-click="ForcePasswordFormController.onDismiss()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="ForcePasswordFormController.changeInProgress" type="submit" class="form__submit" translate="FORM_BUTTON_CHANGE"></button></div></form>'),
  6594. e.put("security/force/force-password/force-password-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="FORCED_PASSWORD_CHANGE_TITLE" class="modal__title"></h3><div class="modal__content"><habbo-force-password-form on-dismiss="$dismiss()" on-success="$close()"></habbo-force-password-form></div>'),
  6595. e.put("shop/payment-details/credit-payment-details/credit-payment-details.html", '<habbo-credit-icon amount="{{:: CreditPaymentDetailsController.item.creditAmount}}" double-credits="{{:: CreditPaymentDetailsController.item.doubleCredits}}" class="payment-details__icon"></habbo-credit-icon><div class="payment-details"><header class="payment-details__header"><h3 class="payment-details__title"><habbo-credit-title amount="{{:: CreditPaymentDetailsController.item.creditAmount}}" double-credits="{{:: CreditPaymentDetailsController.item.doubleCredits}}"></habbo-credit-title></h3><div class="payment-details__price">{{:: CreditPaymentDetailsController.item.price }}</div></header><p ng-if="CreditPaymentDetailsController.item.doubleCredits" translate="SHOP_DOUBLE_CREDITS_DESCRIPTION" translate-values="{ value: CreditPaymentDetailsController.item.creditAmount }"></p><p ng-if="!CreditPaymentDetailsController.item.doubleCredits" translate="SHOP_CREDITS_DESCRIPTION" translate-values="{ value: CreditPaymentDetailsController.item.creditAmount }"></p><habbo-payment-steps item="CreditPaymentDetailsController.item" selected-category="{{CreditPaymentDetailsController.selectedCategory}}"><habbo-payment-info type="store"></habbo-payment-info></habbo-payment-steps></div>'),
  6596. e.put("shop/payment-details/payment-steps/payment-steps.html", '<div ng-if="!PaymentStepsController.disclaimerMethod && !PaymentStepsController.premiumSmsMethod && !PaymentStepsController.adyenMethod" class="payment-steps"><div ng-if="PaymentStepsController.user" class="payment-steps__step"><h3 class="payment-steps__title" translate="SHOP_PAYMENT_DETAILS"></h3><table class="payment-steps__user"><tr><td translate="FORM_NAME_LABEL"></td><td>{{:: PaymentStepsController.user.name}}</td></tr><tr habbo-require-habbo-account-session><td translate="FORM_EMAIL_LABEL"></td><td>{{:: PaymentStepsController.user.email}}</td></tr></table></div><div ng-transclude class="payment-steps__step"></div><habbo-payment-methods item="PaymentStepsController.item" selected-category="{{PaymentStepsController.selectedCategory}}" class="payment-steps__step"></habbo-payment-methods></div><habbo-payment-disclaimer ng-if="PaymentStepsController.disclaimerMethod" item="PaymentStepsController.item" method="PaymentStepsController.disclaimerMethod"></habbo-payment-disclaimer><habbo-premium-sms ng-if="PaymentStepsController.premiumSmsMethod" method="PaymentStepsController.premiumSmsMethod"></habbo-premium-sms><habbo-adyen ng-if="PaymentStepsController.adyenMethod" item="PaymentStepsController.item" method="PaymentStepsController.adyenMethod"></habbo-adyen><div ng-if="PaymentStepsController.disclaimerMethod || PaymentStepsController.premiumSmsMethod || PaymentStepsController.adyenMethod" class="payment-steps__cancel"><a ng-click="PaymentStepsController.reset()" translate="SHOP_DISCLAIMER_CANCEL"></a></div>'),
  6597. e.put("shop/payment-details/product-payment-details/product-payment-details.html", '<habbo-product-icon icon-id="{{:: ProductPaymentDetailsController.item.iconId}}" class="payment-details__icon"></habbo-product-icon><div class="payment-details"><header class="payment-details__header"><h3 class="payment-details__title">{{:: ProductPaymentDetailsController.item.name}}</h3><div class="payment-details__price">{{:: ProductPaymentDetailsController.item.price}}</div></header><p>{{:: ProductPaymentDetailsController.item.description}}</p><habbo-sub-product-icons ng-if="ProductPaymentDetailsController.item.subProducts" sub-products="ProductPaymentDetailsController.item.subProducts"></habbo-sub-product-icons><habbo-payment-steps item="ProductPaymentDetailsController.item" selected-category="{{ProductPaymentDetailsController.selectedCategory}}"><habbo-payment-info type="store"></habbo-payment-info></habbo-payment-steps></div>'),
  6598. e.put("security/force/force-tos/force-tos-form.html", '<form ng-submit="ForceTosFormController.accept()" name="forceTOSAcceptForm" novalidate class="form"><p translate="NEW_USER_AGREEMENT_INFO_TEXT"></p><p translate="NEW_USER_AGREEMENT_GUIDE_TEXT"></p><div class="form__footer"><a ng-click="ForceTosFormController.onDismiss()" class="form__cancel" translate="FORM_CANCEL_LABEL"></a> <button ng-disabled="ForceTosFormController.acceptInProgress" type="submit" class="form__submit" translate="NEW_USER_AGREEMENT_BUTTON"></button></div></form>'),
  6599. e.put("security/force/force-tos/force-tos-modal.html", '<button ng-click="$dismiss()" class="modal__close"></button><h3 translate="NEW_USER_AGREEMENT_TITLE" class="modal__title"></h3><div class="modal__content"><habbo-force-tos-form on-dismiss="$dismiss()" on-success="$close()"></habbo-force-tos-form></div>'),
  6600. e.put("shop/payment-details/offer-payment-details/offer-payment-details.html", '<img ng-src="{{:: OfferPaymentDetailsController.offerPaymentDetails.smallImageUrl}}" class="payment-details__icon"><div class="payment-details"><header class="payment-details__header"><h3 class="payment-details__title">{{:: OfferPaymentDetailsController.offerPaymentDetails.name }}</h3><span class="payment-details__price">{{:: OfferPaymentDetailsController.offerPaymentDetails.price }}</span></header><p>{{:: OfferPaymentDetailsController.offerPaymentDetails.description }}</p><img ng-src="{{:: OfferPaymentDetailsController.offerPaymentDetails.imageUrl}}" class="payment-details__image"><habbo-payment-steps item="OfferPaymentDetailsController.offerPaymentDetails"><habbo-payment-info type="store"></habbo-payment-info></habbo-payment-steps></div>'),
  6601. e.put("shop/payment-details/payment-info/payment-info-store.html", '<h3 class="payment-steps__title" translate="SHOP_PAYMENT_METHOD"></h3><p class="payment-steps__legal" translate="SHOP_PAYMENT_METHOD_INFO"></p>'),
  6602. e.put("shop/payment-details/payment-info/payment-info-subscription.html", '<h3 class="payment-steps__title" translate="SHOP_SUBSCRIPTION_METHOD"></h3><p class="payment-steps__legal" translate="SHOP_SUBSCRIPTION_METHOD_INFO"></p>'),
  6603. e.put("shop/thumbnails/credit-thumbnail/credit-thumbnail.html", '<div class="inventory-thumbnail"><div class="inventory-thumbnail__body"><habbo-credit-icon amount="{{:: CreditThumbnailController.item.creditAmount}}" double-credits="{{:: CreditThumbnailController.item.doubleCredits}}" class="inventory-thumbnail__icon"></habbo-credit-icon><div class="inventory-thumbnail__text"><h3 class="inventory-thumbnail__title"><habbo-credit-title amount="{{:: CreditThumbnailController.item.creditAmount}}" double-credits="{{:: CreditThumbnailController.item.doubleCredits}}"></habbo-credit-title></h3></div><div class="inventory-thumbnail__banner"><span class="inventory-thumbnail__price">{{:: CreditThumbnailController.item.price}}</span></div></div></div>'),
  6604. e.put("shop/payment-details/subscription-payment-details/subscription-payment-details.html", '<habbo-product-icon icon-id="{{:: SubscriptionPaymentDetailsController.item.iconId}}" class="payment-details__icon"></habbo-product-icon><div class="payment-details"><header class="payment-details__header"><h3 class="payment-details__title">{{:: SubscriptionPaymentDetailsController.item.name}}</h3><div class="payment-details__price">{{:: SubscriptionPaymentDetailsController.item.price}}<small class="subscription__price-unit" translate="SHOP_SUBSCRIPTION_PER_MONTH"></small></div></header><p>{{:: SubscriptionPaymentDetailsController.item.description}}</p><habbo-payment-steps item="SubscriptionPaymentDetailsController.item" selected-category="{{SubscriptionPaymentDetailsController.selectedCategory}}"><habbo-payment-info type="subscription"></habbo-payment-info></habbo-payment-steps></div>'),
  6605. e.put("shop/transactions/transactions-history/transactions-history.html", '<table class="transactions-history"><thead><tr><th translate="TRANSACTIONS_TABLE_DATE"></th><th translate="TRANSACTIONS_TABLE_PURCHASE"></th><th translate="TRANSACTIONS_TABLE_VALUE"></th></tr></thead><tbody><tr ng-repeat="item in TransactionsHistoryController.transactions | orderBy: \'-creationTime\' | limitTo: TransactionsHistoryController.limitTo track by $index"><td data-th="{{\'TRANSACTIONS_TABLE_DATE\' | translate}}">{{:: item.creationTime | amDateFormat: \'D MMM YYYY\'}}</td><td data-th="{{\'TRANSACTIONS_TABLE_PURCHASE\' | translate}}"><span ng-if="item.product" class="product-name">{{:: item.product.name}}</span> <span ng-if="item.credits > 0" class="credits" translate="CREDITS_AMOUNT" translate-values="{ value: item.credits }"></span></td><td data-th="{{\'TRANSACTIONS_TABLE_VALUE\' | translate}}">{{:: item.price}}</td></tr></tbody></table>'),
  6606. e.put("shop/subscriptions/subscription/subscription.html", '<section><habbo-web-pages habbo-subscription-page="SubscriptionController.item" class="subscription__description"></habbo-web-pages><habbo-accordion-grid ng-if="!SubscriptionController.item.active"><habbo-accordion-item><habbo-accordion-item-preview><habbo-subscription-thumbnail item="SubscriptionController.item"></habbo-subscription-thumbnail></habbo-accordion-item-preview><habbo-accordion-item-content><habbo-subscription-payment-details item="SubscriptionController.item"></habbo-subscription-payment-details></habbo-accordion-item-content></habbo-accordion-item></habbo-accordion-grid><habbo-subscription-unsubscribe ng-if="SubscriptionController.item.active" item="SubscriptionController.item"></habbo-subscription-unsubscribe></section>'),
  6607. e.put("shop/store/category-filter/category-filter.html", '<ul class="category-filter"><li class="category-filter__item" ng-repeat="category in CategoryFilterController.paymentCategories"><a ng-click="CategoryFilterController.update(category.key)" translate="{{:: category.translateKey}}" ng-class="{ \'category-filter__link--active\': CategoryFilterController.isActive(category.key) }" class="category-filter__link"></a></li></ul>'),
  6608. e.put("shop/store/inventory/credits.html", '<section><h3 class="inventory__section__title" translate="SHOP_CREDITS_TITLE"></h3><habbo-accordion-grid class="inventory__grid"><habbo-accordion-item ng-repeat="item in CreditsController.items track by item.id"><habbo-accordion-item-preview><habbo-credit-thumbnail item="item"></habbo-credit-thumbnail></habbo-accordion-item-preview><habbo-accordion-item-content><habbo-credit-payment-details item="item" selected-category="{{CreditsController.selectedCategory}}"></habbo-credit-payment-details></habbo-accordion-item-content></habbo-accordion-item></habbo-accordion-grid></section>'),
  6609. e.put("shop/store/inventory/inventory.html", '<div ng-if="InventoryController.isDoubleCreditsActive"><habbo-credits ng-if="InventoryController.creditItems.length > 0" items="InventoryController.creditItems" selected-category="{{InventoryController.selectedCategory}}"></habbo-credits><habbo-products ng-if="InventoryController.productItems.length > 0" items="InventoryController.productItems" selected-category="{{InventoryController.selectedCategory}}"></habbo-products></div><div ng-if="!InventoryController.isDoubleCreditsActive"><habbo-products ng-if="InventoryController.productItems.length > 0" items="InventoryController.productItems" selected-category="{{InventoryController.selectedCategory}}"></habbo-products><habbo-credits ng-if="InventoryController.creditItems.length > 0" items="InventoryController.creditItems" selected-category="{{InventoryController.selectedCategory}}"></habbo-credits></div>'),
  6610. e.put("shop/store/inventory/products.html", '<section><h3 class="inventory__section__title" translate="SHOP_OFFERINGS_TITLE"></h3><habbo-accordion-grid class="inventory__grid"><habbo-accordion-item ng-repeat="item in ProductsController.items track by item.id"><habbo-accordion-item-preview><habbo-product-thumbnail item="item"></habbo-product-thumbnail></habbo-accordion-item-preview><habbo-accordion-item-content><habbo-product-payment-details item="item" selected-category="{{ProductsController.selectedCategory}}"></habbo-product-payment-details></habbo-accordion-item-content></habbo-accordion-item></habbo-accordion-grid></section>'),
  6611. e.put("shop/store/targeted-offer/targeted-offer.html", '<habbo-accordion-grid class="offer__grid"><habbo-accordion-item class="accordion__item--single"><habbo-accordion-item-preview><habbo-offer-thumbnail item="TargetedOfferController.offer" class="offer__item__thumbnail"></habbo-offer-thumbnail></habbo-accordion-item-preview><habbo-accordion-item-content><habbo-offer-payment-details offer-payment-details="TargetedOfferController.offerPaymentDetails"></habbo-offer-payment-details></habbo-accordion-item-content></habbo-accordion-item></habbo-accordion-grid>'),
  6612. e.put("shop/voucher-redeem/voucher-icon/voucher-icon.html", '<span ng-if="VoucherIconController.product.icons[0]">&nbsp;<img ng-src="{{:: VoucherIconController.product.icons[0]}}" class="voucher-icon__product"> {{:: VoucherIconController.product.name}}</span> <span ng-if="VoucherIconController.credits">&nbsp;<i class="voucher-icon__credits"></i> {{:: VoucherIconController.credits}}</span>'),
  6613. e.put("shop/thumbnails/offer-thumbnail/offer-thumbnail.html", '<div class="inventory-thumbnail inventory-thumbnail--offer"><div class="inventory-thumbnail__body"><div class="inventory-thumbnail__highlight__banner"><span class="inventory-thumbnail__highlight-wrapper"><span ng-if="OfferThumbnailController.item.highlight" class="inventory-thumbnail__highlight">{{:: OfferThumbnailController.item.highlight}} |</span> <span translate="SHOP_TARGETED_OFFER_EXPIRY_TITLE"></span> <time am-time-ago="OfferThumbnailController.item.expirationDate"></time></span></div><img ng-src="{{:: OfferThumbnailController.item.imageUrl}}" class="inventory-thumbnail__icon inventory-thumbnail__icon--large"> <img ng-src="{{:: OfferThumbnailController.item.smallImageUrl}}" class="inventory-thumbnail__icon"><div class="inventory-thumbnail__text"><h3 class="inventory-thumbnail__title">{{:: OfferThumbnailController.item.header}}</h3><p class="inventory-thumbnail__description">{{:: OfferThumbnailController.item.description}}</p></div><div class="inventory-thumbnail__banner"><span class="inventory-thumbnail__price">{{:: OfferThumbnailController.item.pricePoint.price}}</span></div></div></div>'),
  6614. e.put("shop/thumbnails/product-thumbnail/product-thumbnail.html", '<div class="inventory-thumbnail"><div class="inventory-thumbnail__body"><habbo-product-icon icon-id="{{:: ProductThumbnailController.item.iconId}}" class="inventory-thumbnail__icon"></habbo-product-icon><div class="inventory-thumbnail__text"><h3 class="inventory-thumbnail__title">{{:: ProductThumbnailController.item.name}}</h3></div><div class="inventory-thumbnail__banner"><span class="inventory-thumbnail__price">{{:: ProductThumbnailController.item.price}}</span></div></div></div>'),
  6615. e.put("shop/thumbnails/subscription-thumbnail/subscription-thumbnail.html", '<div class="inventory-thumbnail"><div class="inventory-thumbnail__body"><habbo-product-icon icon-id="{{:: SubscriptionThumbnailController.item.iconId}}" class="inventory-thumbnail__icon"></habbo-product-icon><div class="inventory-thumbnail__text"><h3 class="inventory-thumbnail__title">{{:: SubscriptionThumbnailController.item.name}}</h3></div><div class="inventory-thumbnail__banner"><div class="inventory-thumbnail__price">{{:: SubscriptionThumbnailController.item.price}}<small class="subscription__price-unit" translate="SHOP_SUBSCRIPTION_PER_MONTH"></small></div></div></div></div>'),
  6616. e.put("common/form/password-new/password-strength/password-strength.html", '<div class="password-strength__label"><span>{{ \'PASSWORD_STRENGTH_LABEL\' | translate }}</span> <span>{{ PasswordStrengthController.score | strengthRating | ratingTranslation | translate }}</span></div><div class="password-strength__field"><div habbo-password-strength-indicator="PasswordStrengthController.score" ng-class="\'password-strength__indicator--\' + (PasswordStrengthController.score | strengthRating)" class="password-strength__indicator"></div></div><p ng-transclude class="password-strength__error"></p>'),
  6617. e.put("shop/payment-details/payment-steps/adyen/adyen.html", '<div ng-if="AdyenController.state === \'AWAITING_INPUT\'"><h3 translate="SHOP_PAYMENT_ADYEN_CARD_DETAILS" class="adyen__form-header"></h3><img ng-src="{{:: AdyenController.method.buttonLogoUrl}}" class="adyen__form-header-icon"><div class="adyen__form-wrapper"><habbo-credit-card-form class="adyen__form" card="AdyenController.card" on-submit="AdyenController.onSend(data)"></habbo-credit-card-form></div></div><habbo-message-container ng-if="AdyenController.state === \'SUCCESS\'" type="check" class="adyen__result-box"><h3 translate="SHOP_PAYMENT_COMPLETED" class="adyen__form-header"></h3><p translate="SHOP_PAYMENT_TRANSACTION_DETAILS" translate-values="{ transactionId: AdyenController.transactionId }"></p><button type="submit" translate="OK" class="payment-methods__button payment-button" ng-click="AdyenController.close()"></button></habbo-message-container><habbo-message-container ng-if="AdyenController.state === \'FAILURE\'" type="x" class="adyen__result-box"><h3 translate="SHOP_PAYMENT_FAILED" class="adyen__form-header"></h3><p ng-if="AdyenController.errorType === \'HTTP_ERROR\'">{{:: AdyenController.errorMsg}}</p><p ng-if="AdyenController.errorType === \'USER_DATA\'" translate="SHOP_PLEASE_CHECK_CREDIT_CARD"></p><p ng-if="AdyenController.errorType === \'LIMIT_EXCEEDED\'" translate="SHOP_LIMIT_EXCEEDED"></p><p ng-if="AdyenController.errorType === \'RISK_CHECK_FAILED\'" translate="SHOP_RISK_CHECK_FAILED"></p><button type="submit" translate="OK" class="payment-methods__button payment-button" ng-click="AdyenController.showInputForm()"></button></habbo-message-container>'),
  6618. e.put("shop/payment-details/payment-steps/payment-button/payment-button.html", '<button ng-click="PaymentButtonController.purchase()" ng-disabled="PaymentButtonController.paymentInProgress" class="payment-button" translate="{{:: PaymentButtonController.translationKey}}"></button>'),
  6619. e.put("shop/payment-details/payment-steps/payment-disclaimer/payment-disclaimer.html", '<h3 class="payment-steps__title payment-steps__title--single" translate="SHOP_SMALLPRINT_TITLE"></h3><small class="payment-steps__step payment-steps__legal" translate="{{:: PaymentDisclaimerController.methodSmallPrintKey}}"></small><ul class="payment-steps__step"><li class="payment-methods__method"><habbo-payment-button item="PaymentDisclaimerController.item" method="PaymentDisclaimerController.method" class="payment-methods__button"></habbo-payment-button></li></ul>'),
  6620. e.put("shop/payment-details/payment-steps/payment-methods/payment-methods.html", '<ul><li ng-repeat="paymentMethod in PaymentMethodsController.item.paymentMethods | paymentCategory: PaymentMethodsController.selectedCategory" class="payment-methods__method"><img ng-if="paymentMethod.buttonLogoUrl" ng-src="{{:: paymentMethod.buttonLogoUrl}}" class="payment-methods__icon"> <span ng-if="!paymentMethod.buttonLogoUrl && (paymentMethod.category === \'online\' || paymentMethod.category === \'prepaid\')" class="payment-methods__label">{{:: paymentMethod.name}}</span> <span ng-if="!paymentMethod.buttonLogoUrl && (paymentMethod.category === \'mobile\' || paymentMethod.category === \'landline\')" class="payment-methods__label" translate="{{:: PaymentMethodsController.PaymentStepsController.getMethodTitleKey(paymentMethod)}}"></span><habbo-payment-button ng-if="!paymentMethod.disclaimerRequired && !paymentMethod.premiumSms && paymentMethod.requestPath !== \'direct\'" item="PaymentMethodsController.item" method="paymentMethod" class="payment-methods__button"></habbo-payment-button><button ng-if="paymentMethod.disclaimerRequired && !paymentMethod.premiumSms && paymentMethod.requestPath !== \'direct\'" ng-click="PaymentMethodsController.PaymentStepsController.setDisclaimer(paymentMethod)" class="payment-methods__button payment-button" translate="SHOP_CONTINUE_BUTTON"></button> <button ng-if="paymentMethod.premiumSms" ng-click="PaymentMethodsController.PaymentStepsController.setPremiumSms(paymentMethod)" class="payment-methods__button payment-button" translate="SHOP_CONTINUE_BUTTON"></button> <button ng-if="paymentMethod.requestPath === \'direct\'" ng-click="PaymentMethodsController.PaymentStepsController.setAdyen(paymentMethod)" class="payment-methods__button payment-button" translate="SHOP_CONTINUE_BUTTON"></button></li></ul>'),
  6621. e.put("shop/payment-details/payment-steps/premium-sms/premium-sms.html", '<h3 translate="SHOP_PAYMENT_PSMS_INSTRUCTIONS"></h3><p translate="{{:: PremiumSmsController.methodInstructionKey}}"></p><div class="premium-sms__voucher-redeem__wrapper"><habbo-voucher-redeem class="premium-sms__voucher-redeem"></habbo-voucher-redeem></div><p translate="SHOP_PAYMENT_PSMS_HELP"></p><h3 translate="SHOP_SMALLPRINT_TITLE"></h3><small class="premium-sms__legal" translate="{{:: PremiumSmsController.methodSmallPrintKey}}"></small>'),
  6622. e.put("shop/payment-details/product-payment-details/sub-product-icons/sub-product-icons.html", '<p class="sub-product-icons__description" translate="SHOP_PRODUCT_SUBPRODUCTS_DESCRIPTION"></p><ul><li ng-repeat="subProduct in SubProductIconsController.subProducts" class="sub-product-icons__icon" data-count="{{:: subProduct.count }}"><img ng-src="{{:: subProduct.imgUrl}}"></li></ul>'),
  6623. e.put("shop/subscriptions/subscription/subscription-unsubscribe/subscription-unsubscribe.html", '<habbo-product-icon icon-id="{{:: SubscriptionUnsubscribeController.item.iconId}}" class="subscription-unsubscribe__icon"></habbo-product-icon><div class="subscription-unsubscribe__content"><h4>{{:: SubscriptionUnsubscribeController.item.name}}</h4><p translate="SHOP_SUBSCRIPTION_ACTIVE_TEXT"></p><p translate="SHOP_SUBSCRIPTION_BILLING_TIME" translate-values="{ time: (SubscriptionUnsubscribeController.item.nextBillingTime | date: \'medium\') }"></p></div><button ng-click="SubscriptionUnsubscribeController.unsubscribe()" ng-disabled="SubscriptionUnsubscribeController.unsubscribeInProgress" class="subscription-unsubscribe__button" translate="SHOP_SUBSCRIPTION_UNSUBSCRIBE_BUTTON"></button>')
  6624. }
  6625. ]),
  6626. angular.module("events", []).constant("EVENTS", {
  6627. accordionOpen: "accordion-item-open",
  6628. accordionClose: "accordion-item-close",
  6629. accordionResize: "accordion-item-resize",
  6630. accordionUpdate: "accordion-item-update",
  6631. clientOpen: "client-open",
  6632. clientClose: "client-close",
  6633. securityLogin: "security-login",
  6634. shopPaymentClose: "payment-close"
  6635. }),
  6636. angular.module("app", ["ngAnimate", "activate", "community", "console.warning", "creation", "email.optout", "email.report.unauthorized", "eu.cookie.banner", "footer", "help.login", "home", "hotel", "logout", "not.found", "password.reset", "playing.habbo", "profile", "registration", "room", "security", "settings", "shop"]).config(["$provide", function(e) {
  6637. e.decorator("$exceptionHandler", ["$delegate", function(e) {
  6638. return function(t, o) {
  6639. Bugsnag.notifyException(t, {
  6640. diagnostics: {
  6641. cause: o
  6642. }
  6643. }),
  6644. e(t, o)
  6645. }
  6646. }
  6647. ])
  6648. }
  6649. ]).run(["spinner", function(e) {
  6650. e.init()
  6651. }
  6652. ]),
  6653. function() {
  6654. var e = !0;
  6655. window.Bugsnag || (window.Bugsnag = {
  6656. notify: _.noop,
  6657. notifyException: _.noop
  6658. }),
  6659. angular.module("app").config(["$sceDelegateProvider", function(e) {
  6660. var t = e.resourceUrlWhitelist()
  6661. , o = "https://*.habbo.nl/**,https://habboo-a.akamaihd.net/**,https://www.offertoro.com/**".split(",");
  6662. t = t.concat(o),
  6663. e.resourceUrlWhitelist(t)
  6664. }
  6665. ]).config(["$compileProvider", function(t) {
  6666. t.debugInfoEnabled(!e)
  6667. }
  6668. ]),
  6669. angular.module("config", []).constant("CONFIG", {
  6670. apiUrl: "/api",
  6671. extraDataUrl: "/extradata",
  6672. shopUrl: "/shopapi",
  6673. appStoreUrl: "https://itunes.apple.com/app/id794866182",
  6674. badgeUrl: "https://habboo-a.akamaihd.net/c_images/album1584",
  6675. googlePlayUrl: "https://play.google.com/store/apps/details?id=air.com.sulake.habboair",
  6676. habboWebAdsUrl: "https://habboo-a.akamaihd.net/habbo-web-ads/",
  6677. habboWebLeaderboardsUrl: "https://habboo-a.akamaihd.net/habbo-web-leaderboards/",
  6678. habboWebNewsUrl: "https://habboo-a.akamaihd.net/habbo-web-news/nl/production/",
  6679. habboWebPagesUrl: "https://habboo-a.akamaihd.net/habbo-web-pages/production/",
  6680. imagingUrl: "/habbo-imaging",
  6681. lang: "nl",
  6682. hotel: "hhnl",
  6683. localizationSite: "nl",
  6684. minAge: parseInt("12", 10),
  6685. rpxLocale: "nl",
  6686. rpxTokenUrl: "https://www.habbo.nl/api/public/authentication/rpx",
  6687. offerToroEnabled: "true",
  6688. twitterAccount: "@Habbo_Staff",
  6689. adyenPublicKey: "10001|DB119F7832E23CBEDA2A330D3C13310D78ABA07136CDFFFA3D798BDFE4A903D5A079EE09710BBEC72573F0CA80D48DD0380D8AC1B0FDBCB978E69E9BE92ABDC27020858A52DC8D7A9C2D77B071FE1E6A3177E4E73E8E7CFC4A13C881BBBEF3C2EFBB24475818AB9E56BC597BABFD306593C3DF2B16F49D38F560212C183492EE7D0750CE84AB3509563CB3C99EC0B815CF5211E793500110B2A53DCAD793E267677BBE89035E5E9662FD2DB94A5EECBD6FB81F5DAF7205F9EBF15963639FC72DF0875CC2249FB31B300CC8183B2C948B3B3843C414677C9EC82C6A2D4CBF937B57FD03A53B0A8A56369AD490CEAB9EED18FE77E7B9032445A57A06CE23DE6115"
  6690. }),
  6691. angular.module("locale", ["angularMoment", "pascalprecht.translate"]),
  6692. angular.module("angularMoment").run(["amMoment", function(e) {
  6693. e.changeLocale("nl")
  6694. }
  6695. ]),
  6696. angular.module("ezfb").config(["ezfbProvider", function(e) {
  6697. e.setInitParams({
  6698. appId: "162105803517"
  6699. }),
  6700. e.setLocale("nl_NL")
  6701. }
  6702. ]),
  6703. angular.module("noCAPTCHA").config(["noCAPTCHAProvider", function(e) {
  6704. e.setLanguage("nl"),
  6705. e.setSiteKey("6LdhyucSAAAAAKNhbY53azV2gZul4DcD8Xo111yp")
  6706. }
  6707. ]),
  6708. angular.module("pascalprecht.translate").config(["$translateProvider", function(e) {
  6709. e.preferredLanguage("nl"),
  6710. e.useStaticFilesLoader({
  6711. prefix: "https://habboo-a.akamaihd.net/habbo-web-l10n/",
  6712. suffix: ".json"
  6713. }),
  6714. e.useSanitizeValueStrategy("escapeParameters")
  6715. }
  6716. ])
  6717. }();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement