function card_title(text) { return '
' + text + '
'; } function card_subtitle(text) { return '
' + text + '
'; } function card_ruler() { return '
'; } function card_property(name, text) { var result = ""; result += '
'; result += '

' + name.trim() + '

'; result += '

' + text.trim() + '

'; result += '
'; return result; } function card_description(name, text) { var result = ""; result += '
'; result += '

' + name.trim() + '

'; result += '

' + text.trim() + '

'; result += '
'; return result; } function card_section(text) { return '

'+text+'

'; } function card_fill1() { return '
'; } function card_fill2() { return '
'; } function card_fill3() { return '
'; } function card_fill4() { return '
'; } function card_icon(name) { var result = ""; result += '
'; result += '
'; result += '
'; result += '
'; return result; } function card_contents(contents) { var result = ""; result += '
'; result += contents.map(function (value) { var parts = value.split("|").map(function (str) { return str.trim(); }); switch (parts[0]) { case 'subtitle': return card_subtitle(parts[1], parts[2]); break; case 'property': return card_property(parts[1], parts[2]); break; case 'rule': return card_ruler(); break; case 'description': return card_description(parts[1], parts[2]); break; case 'text': return card_description("", parts[1]); break; case 'fill-1': return card_fill1(); break; case 'fill-2': return card_fill2(); break; case 'fill-3': return card_fill3(); break; case 'fill-4': return card_fill4(); break; case 'section': return card_section(parts[1]); break; default: return ""; } }).join("\n"); result += '
'; return result; } var card_default_data = { count:1, title:"", icon:"", contents:[], color: "white" } function card(data) { var front = ""; var back = ""; front += '
'; front += card_icon(data.icon); front += card_title(data.title); front += card_contents(data.contents); front += '
'; var icon_back = data.icon_back || data.icon; back += '
'; back += '
'; back += '
'; back += '
'; back += '
'; back += '
'; back += '
'; var count = data.count || 1; var result = { front: [], back: [] }; for (var i = 0; i < count; ++i) { result.front.push(front); result.back.push(back); } return result; } function card_split_pages(data, cards_per_page) { var result = []; for (var i = 0; i < data.length; i += cards_per_page) { var page = data.slice(i, i + cards_per_page); result.push(page); } return result; } function cards_flip_left_right(cards) { return [ cards[2], cards[1], cards[0], cards[5], cards[4], cards[3], cards[8], cards[7], cards[6] ]; } function card_generate_html(datas) { var front = []; var back = []; // Generate HTML for each card datas.forEach(function (data) { var result = card(data); front = front.concat(result.front); back = back.concat(result.back); }); // Fill the last page with blank cards if (front.length % 9 !== 0) { var result = card(card_default_data); for (var i = front.length % 9; i < 9; ++i) { front = front.concat(result.front); back = back.concat(result.back); } } // Split pages front_pages = card_split_pages(front, 9); back_pages = card_split_pages(back, 9); // Clear the previous content of the document var parent_element = document.getElementsByClassName("container")[0]; while (parent_element.hasChildNodes()) { parent_element.removeChild(parent_element.lastChild); } // Add generated HTML to the document for (var i = 0; i < front_pages.length; ++i) { var page = document.createElement("page"); page.setAttribute("size", "A4"); page.innerHTML = front_pages[i].join("\n"); parent_element.appendChild(page); var page = document.createElement("page"); page.setAttribute("size", "A4"); page.innerHTML = cards_flip_left_right(back_pages[i]).join("\n"); parent_element.appendChild(page); } } //card_generate_html(card_data);