Guest User

Untitled

a guest
Dec 1st, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.24 KB | None | 0 0
  1. namespace MVCTest
  2. {
  3. [ViewModel]
  4. public class SPAViewModel
  5. {
  6. [Record]
  7. public class Mail
  8. {
  9. public Id : int { get; set; }
  10. public From : string { get; set; }
  11. public To : string { get; set; }
  12. public Date : string { get; set; }
  13. public Subject : string { get; set; }
  14. public MessageContent : string { get; set; }
  15. public Folder : string { get; set; }
  16. }
  17.  
  18. [Record]
  19. public class FolderData
  20. {
  21. public Id : string { get; set; }
  22. public Mails : IEnumerable[Mail] { get; set; }
  23. }
  24.  
  25. public Folders : List[string] { get; set; }
  26. public ChosenFolderId : int { get; set; }
  27. public ChosenFolderData : int { get; set; }
  28. public ChosenMailData : int { get; set; }
  29.  
  30. public this()
  31. {
  32. Folders = ["Inbox", "Archive", "Sent", "Spam"].ToList();
  33. js self = this;
  34. js <#
  35. Sammy(function() {
  36. this.get("#:folder", function() {
  37. self.ChosenFolderId(this.params.folder);
  38. self.ChosenMailData(null);
  39. $.get("/SPAViewModel/Folder", { folder: this.params.folder }, function(result) {
  40. self.ChosenFolderData(ToTypedObject(result))
  41. });
  42. });
  43.  
  44. this.get("#:folder/:mailId", function() {
  45. self.ChosenFolderId(this.params.folder);
  46. self.ChosenMailData(null);
  47. $.get("/SPAViewModel/Mail", { mailId: this.params.mailId }, function(result) {
  48. self.ChosenMailData(ToTypedObject(result))
  49. });
  50. });
  51.  
  52. this.get('', function() { this.app.runRoute('get', '#Inbox') });
  53. }).run();
  54. #>;
  55. }
  56.  
  57. public GoToFolder(folder : int) : void {
  58. js location.hash = folder;
  59. }
  60.  
  61. public GoToMail(mail : Mail) : void {
  62. js location.hash = mail.Folder() + '/' + mail.Id();
  63. }
  64.  
  65. public class Server
  66. {
  67. allMail : list[Mail] = [
  68. Mail(1, "Abbot \u003coliver@smoke-stage.xyz\u003e", "steve@example.com", "May 25, 2011", "Booking confirmation #389629244", "", "Inbox"),
  69. Mail(2, "Addison Begoat \u003cupton.oprdrusson@pear-income.xyz\u003e", "steve@example.com", "May 7, 2011", "FW: Associate advice", "", "Inbox"),
  70. Mail(3, "Allistair \u003cleroy72@plane-railway.xyz\u003e", "steve@example.com", "May 19, 2011", "RE: Phone call tomorrow 5 o\u0027clock", "", "Inbox"),
  71. Mail(4, "(archived) Abbot \u003coliver@smoke-stage.xyz\u003e", "steve@example.com", "May 25, 2011", "Booking confirmation #389629244", "", "Archive"),
  72. Mail(5, "(archived) Addison Begoat \u003cupton.oprdrusson@pear-income.xyz\u003e", "steve@example.com", "May 7, 2011", "FW: Associate advice", "", "Archive")
  73. ];
  74.  
  75. public Folder(folder : string) : FolderData
  76. {
  77. FolderData(folder, allMail.Where(m => m.Folder == folder));
  78. }
  79.  
  80. public Mail(mailId : int) : Mail
  81. {
  82. allMail.FirstOrDefault(m => m.Id == mailId);
  83. }
  84. }
  85. }
  86.  
  87. public partial module Views
  88. {
  89. [View()]
  90. public SPAView(viewModel : SPAViewModel) : string
  91. {
  92. _ = viewModel;
  93. <#
  94. <div xmlns="">
  95. <ul class="folders" data-bind="foreach: Folders">
  96. <li data-bind="text: $data,
  97. css: { selected: $data == $root.ChosenFolderId() },
  98. click: $root.GoToFolder"> </li>
  99. </ul>
  100.  
  101. <table class="mails" data-bind="with: ChosenFolderData">
  102. <thead><tr><th>From</th><th>To</th><th>Subject</th><th>Date</th></tr></thead>
  103. <tbody data-bind="foreach: Mails">
  104. <tr data-bind="click: $root.GoToMail">
  105. <td data-bind="text: From"> </td>
  106. <td data-bind="text: To"> </td>
  107. <td data-bind="text: Subject"> </td>
  108. <td data-bind="text: Date"> </td>
  109. </tr>
  110. </tbody>
  111. </table>
  112.  
  113. <div class="viewMail" data-bind="with: ChosenMailData">
  114. <div class="mailInfo">
  115. <h1 data-bind="text: Subject"> </h1>
  116. <p><label>From</label>: <span data-bind="text: From"> </span></p>
  117. <p><label>To</label>: <span data-bind="text: To"> </span></p>
  118. <p><label>Date</label>: <span data-bind="text: Date"> </span></p>
  119. </div>
  120. <p class="message" data-bind="html: MessageContent"> </p>
  121. </div>
  122. </div>
  123. #>
  124. }
  125. }
  126. }
Add Comment
Please, Sign In to add comment