Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. import { render } from "vdom-generator";
  2.  
  3. function* Clock(props, update) {
  4. let clockText = new Date().toTimeString();
  5.  
  6. const timer = setInterval(() => {
  7. clockText = new Date().toTimeString();
  8. update.onAnimationFrame();
  9. }, props.interval);
  10.  
  11. let lastClockText = clockText;
  12.  
  13. while ((props = yield)) {
  14. if (clockText !== lastClockText) {
  15. yield (
  16. <span>
  17. {clockText}
  18. </span>
  19. );
  20. } else {
  21. yield null;
  22. }
  23. }
  24.  
  25. clearInterval(timer);
  26. }
  27.  
  28. async function CurrentMessage(props) {
  29. const messageResponse = await fetch("/api/message");
  30. const message = await messageResponse.text();
  31.  
  32. return (
  33. <h1>
  34. {message}
  35. </h1>
  36. );
  37. }
  38.  
  39. async function* NumberedMessage(_, update) {
  40. const getMessage = async number => {
  41. const messageResponse = await fetch("/api/message");
  42. return await messageResponse.text();
  43. };
  44.  
  45. let messageNumber = 0;
  46.  
  47. const handleUp = () => {
  48. messageNumber++;
  49. update();
  50. };
  51.  
  52. const handleDown = () => {
  53. if (messageNumber > 0) {
  54. messageNumber--;
  55. update();
  56. }
  57. };
  58.  
  59. const container = children =>
  60. <div>
  61. {children}
  62. <button onClick={handleDown}>Down</button>
  63. <button onClick={handleUp}>Up</button>
  64. </div>;
  65.  
  66. while (yield) {
  67. yield container(<em>Loading...</em>);
  68.  
  69. const message = await getMessage(messageNumber);
  70. yield container(
  71. <strong>
  72. {message}
  73. </strong>
  74. );
  75. }
  76. }
  77.  
  78. const App = props =>
  79. <div>
  80. <Clock />
  81. <CurrentMessage />
  82. <NumberedMessage />
  83. </div>;
  84.  
  85. render(App, document.getElementById("app"));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement