four-oh-four.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. define([
  2. 'jquery',
  3. '/api/config',
  4. '/common/hyperscript.js',
  5. '/common/outer/local-store.js',
  6. '/customize/messages.js',
  7. 'less!/customize/src/less2/pages/page-404.less',
  8. ], function ($, Config, h, LocalStore, Messages) {
  9. var urlArgs = Config.requireConf.urlArgs;
  10. var img = h('img#cp-logo', {
  11. src: '/customize/cryptpad-new-logo-colors-logoonly.png?' + urlArgs
  12. });
  13. var brand = h('h1#cp-brand', 'CryptPad');
  14. var message = h('h2#cp-scramble', Messages.four04_pageNotFound);
  15. var title = h('h2#cp-title', "404");
  16. var loggedIn = LocalStore.isLoggedIn();
  17. var link = h('a#cp-link', {
  18. href: loggedIn? '/drive/': '/',
  19. }, loggedIn? Messages.header_logoTitle: Messages.header_homeTitle);
  20. if (Config.httpUnsafeOrigin && Config.httpUnsafeOrigin !== window.location.origin
  21. && window.parent) {
  22. $(link).click(function (e) {
  23. e.preventDefault();
  24. window.parent.location = Config.httpUnsafeOrigin + $(link).attr('href').slice(1);
  25. });
  26. }
  27. var content = h('div#cp-main', [
  28. img,
  29. brand,
  30. title,
  31. message,
  32. link,
  33. ]);
  34. document.body.appendChild(content);
  35. var die = function (n) { return Math.floor(Math.random() * n); };
  36. var randomChar = function () {
  37. return String.fromCharCode(die(94) + 34);
  38. };
  39. var mutate = function (S, i, c) {
  40. var A = S.split("");
  41. A[i] = c;
  42. return A.join("");
  43. };
  44. var take = function (A) {
  45. var n = die(A.length);
  46. var choice = A[n];
  47. A.splice(n, 1);
  48. return choice;
  49. };
  50. var makeDecryptor = function (el, t, difficulty, cb) {
  51. var Orig = el.innerText;
  52. var options = [];
  53. el.innerText = el.innerText.split("").map(function (c, i) {
  54. Orig[i] = c;
  55. options.push(i);
  56. return randomChar();
  57. }).join("");
  58. return function f () {
  59. if (die(difficulty) === 0) {
  60. var choice = take(options);
  61. el.innerText = mutate(el.innerText, choice, Orig.charAt(choice));
  62. } else { // make a superficial change
  63. el.innerText = mutate(el.innerText,
  64. options[die(options.length)],
  65. randomChar());
  66. }
  67. setTimeout(options.length > 0? f: cb, t);
  68. };
  69. };
  70. makeDecryptor(brand, 70, 2, function () { })();
  71. makeDecryptor(title, 50, 14, function () { })();
  72. makeDecryptor(link, 20, 4, function () {})();
  73. makeDecryptor(message, 12, 3, function () {
  74. console.log('done');
  75. })();
  76. });