暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

cards.js 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. function card_title(text) {
  2. return '<div class="title">' + text + '</div>';
  3. }
  4. function card_subtitle(text) {
  5. return '<div class="subtitle">' + text + '</div>';
  6. }
  7. function card_ruler() {
  8. return '<div class="ruler"></div>';
  9. }
  10. function card_property(name, text) {
  11. var result = "";
  12. result += '<div class="property-line">';
  13. result += ' <h4 class="property-name">' + name.trim() + '</h4>';
  14. result += ' <p class="property-text">' + text.trim() + '</p>';
  15. result += '</div>';
  16. return result;
  17. }
  18. function card_description(name, text) {
  19. var result = "";
  20. result += '<div class="description-line">';
  21. result += ' <h4 class="description-name">' + name.trim() + '</h4>';
  22. result += ' <p class="description-text">' + text.trim() + '</p>';
  23. result += '</div>';
  24. return result;
  25. }
  26. function card_section(text) {
  27. return '<h3>'+text+'</h3>';
  28. }
  29. function card_fill1() {
  30. return '<div class="fill-1"></div>';
  31. }
  32. function card_fill2() {
  33. return '<div class="fill-2"></div>';
  34. }
  35. function card_fill3() {
  36. return '<div class="fill-3"></div>';
  37. }
  38. function card_fill4() {
  39. return '<div class="fill-4"></div>';
  40. }
  41. function card_icon(name) {
  42. var result = "";
  43. result += '<div class="title-icon-container">';
  44. result += ' <div class="title-icon icon-' + name + '">';
  45. result += ' </div>';
  46. result += '</div>';
  47. return result;
  48. }
  49. function card_contents(contents) {
  50. var result = "";
  51. result += '<div class="content-container">';
  52. result += contents.map(function (value) {
  53. var parts = value.split("|").map(function (str) { return str.trim(); });
  54. switch (parts[0]) {
  55. case 'subtitle': return card_subtitle(parts[1], parts[2]); break;
  56. case 'property': return card_property(parts[1], parts[2]); break;
  57. case 'rule': return card_ruler(); break;
  58. case 'description': return card_description(parts[1], parts[2]); break;
  59. case 'text': return card_description("", parts[1]); break;
  60. case 'fill-1': return card_fill1(); break;
  61. case 'fill-2': return card_fill2(); break;
  62. case 'fill-3': return card_fill3(); break;
  63. case 'fill-4': return card_fill4(); break;
  64. case 'section': return card_section(parts[1]); break;
  65. default: return "";
  66. }
  67. }).join("\n");
  68. result += '</div>';
  69. return result;
  70. }
  71. var card_default_data = {
  72. count:1,
  73. title:"",
  74. icon:"",
  75. contents:[],
  76. color: "white"
  77. }
  78. function card(data) {
  79. var front = "";
  80. var back = "";
  81. front += '<div class="card color-' + data.color + '">';
  82. front += card_icon(data.icon);
  83. front += card_title(data.title);
  84. front += card_contents(data.contents);
  85. front += '</div>';
  86. var icon_back = data.icon_back || data.icon;
  87. back += '<div class="card color-' + data.color + '">';
  88. back += ' <div class="card-back">';
  89. back += ' <div class="card-back-inner">';
  90. back += ' <div class="back-icon icon-' + icon_back + '"></div>';
  91. back += ' </div>';
  92. back += ' </div>';
  93. back += '</div>';
  94. var count = data.count || 1;
  95. var result = { front: [], back: [] };
  96. for (var i = 0; i < count; ++i) {
  97. result.front.push(front);
  98. result.back.push(back);
  99. }
  100. return result;
  101. }
  102. function card_split_pages(data, cards_per_page) {
  103. var result = [];
  104. for (var i = 0; i < data.length; i += cards_per_page) {
  105. var page = data.slice(i, i + cards_per_page);
  106. result.push(page);
  107. }
  108. return result;
  109. }
  110. function cards_flip_left_right(cards) {
  111. return [
  112. cards[2], cards[1], cards[0],
  113. cards[5], cards[4], cards[3],
  114. cards[8], cards[7], cards[6]
  115. ];
  116. }
  117. function card_generate_html(datas) {
  118. var front = [];
  119. var back = [];
  120. // Generate HTML for each card
  121. datas.forEach(function (data) {
  122. var result = card(data);
  123. front = front.concat(result.front);
  124. back = back.concat(result.back);
  125. });
  126. // Fill the last page with blank cards
  127. if (front.length % 9 !== 0) {
  128. var result = card(card_default_data);
  129. for (var i = front.length % 9; i < 9; ++i) {
  130. front = front.concat(result.front);
  131. back = back.concat(result.back);
  132. }
  133. }
  134. // Split pages
  135. front_pages = card_split_pages(front, 9);
  136. back_pages = card_split_pages(back, 9);
  137. // Clear the previous content of the document
  138. var parent_element = document.getElementsByClassName("container")[0];
  139. while (parent_element.hasChildNodes()) {
  140. parent_element.removeChild(parent_element.lastChild);
  141. }
  142. // Add generated HTML to the document
  143. for (var i = 0; i < front_pages.length; ++i) {
  144. var page = document.createElement("page");
  145. page.setAttribute("size", "A4");
  146. page.innerHTML = front_pages[i].join("\n");
  147. parent_element.appendChild(page);
  148. var page = document.createElement("page");
  149. page.setAttribute("size", "A4");
  150. page.innerHTML = cards_flip_left_right(back_pages[i]).join("\n");
  151. parent_element.appendChild(page);
  152. }
  153. }
  154. //card_generate_html(card_data);