123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- // Ugly global variable holding the current card deck
- var card_data = [];
- var card_options = card_default_options();
-
- function ui_generate() {
- // Generate output HTML
- var card_html = card_pages_generate_html(card_data, card_options);
-
- // Open a new window for the output
- // Use a separate window to avoid CSS conflicts
- var tab = window.open("output.html", 'rpg-cards-output');
-
- // Send the generated HTML to the new window
- // Use a delay to give the new window time to set up a message listener
- setTimeout(function () { tab.postMessage(card_html, '*') }, 100);
- }
-
- function ui_load_sample() {
- card_data = card_data_example;
- ui_update_card_list();
- }
-
- function ui_clear_all() {
- card_data = [];
- ui_update_card_list();
- }
-
- function ui_load_files(evt) {
- ui_clear_all();
-
- var files = evt.target.files;
-
- for (var i = 0, f; f = files[i]; i++) {
- var reader = new FileReader();
-
- reader.onload = function (reader) {
- var data = JSON.parse(this.result);
- ui_add_cards(data);
- };
-
- reader.readAsText(f);
- }
- }
-
- function ui_add_cards(data) {
- card_data = card_data.concat(data);
- ui_update_card_list();
- }
-
- function ui_add_new_card() {
- card_data.push(card_default_data());
- ui_update_card_list();
- ui_select_card_by_index(card_data.length - 1);
- }
-
- function ui_duplicate_card() {
- if (card_data.length > 0) {
- var old_card = ui_selected_card();
- var new_card = $.extend({}, old_card);
- card_data.push(new_card);
- new_card.title = new_card.title + " (Copy)";
- } else {
- card_data.push(card_default_data());
- }
- ui_update_card_list();
- ui_select_card_by_index(card_data.length - 1);
- }
-
- function ui_select_card_by_index(index) {
- $("#selected-card").val(index);
- ui_update_selected_card();
- }
-
- function ui_selected_card_index() {
- return parseInt($("#selected-card").val(), 10);
- }
-
- function ui_selected_card() {
- return card_data[ui_selected_card_index()];
- }
-
- function ui_delete_card() {
- card_data.splice(ui_selected_card_index(), 1);
- ui_update_card_list();
- }
-
- function ui_update_card_list() {
- $("#total_card_count").text("Deck contains " + card_data.length + " unique cards.");
-
- $('#selected-card').empty();
- for (var i = 0; i < card_data.length; ++i) {
- var card = card_data[i];
- $('#selected-card')
- .append($("<option></option>")
- .attr("value", i)
- .text(card.title));
- }
-
- ui_update_selected_card();
- }
-
- function ui_save_file() {
- var str = JSON.stringify(card_data, null, " ");
- var parts = [str];
- var blob = new Blob(parts, { type: 'application/json' });
- var url = URL.createObjectURL(blob);
-
- var a = $("#file-save-link")[0];
- a.href = url;
- a.download = "rpg_cards.json";
- a.click();
-
- URL.revokeObjectURL(url);
- }
-
- function ui_update_selected_card() {
- var card = ui_selected_card();
- if (card) {
- $("#card-title").val(card.title);
- $("#card-count").val(card.count);
- $("#card-icon").val(card.icon);
- $("#card-icon-back").val(card.icon_back);
- $("#card-contents").val(card.contents.join("\n"));
- $("#card-color").val(card.color).change();
- }
-
- ui_render_selected_card();
- }
-
- function ui_render_selected_card() {
- var card = ui_selected_card();
- $('#preview-container').empty();
- if (card) {
- var front = card_generate_front(card, card_options);
- var back = card_generate_back(card, card_options);
- $('#preview-container').html(front + "\n" + back);
- }
- }
-
- function ui_open_help() {
- window.open("http://crobi.github.io/rpg-cards/", "_blank");
- }
-
- function ui_select_icon() {
- window.open("http://game-icons.net/", "_blank");
- }
-
- function ui_setup_color_selector() {
- // Insert colors
- $.each(card_colors, function (name, val) {
- $(".colorselector-data")
- .append($("<option></option>")
- .attr("value", name)
- .attr("data-color", val)
- .text(name));
- });
-
- // Callbacks for when the user picks a color
- $('#default_color_selector').colorselector({
- callback: function (value, color, title) {
- $("#default-color").val(title);
- ui_set_default_color(title);
- }
- });
- $('#card_color_selector').colorselector({
- callback: function (value, color, title) {
- $("#card-color").val(title);
- ui_set_card_color(value);
- }
- });
-
- // Styling
- $(".dropdown-colorselector").addClass("input-group-addon color-input-addon");
- }
-
- function ui_set_default_color(color) {
- card_options.default_color = color;
- ui_render_selected_card();
- }
-
- function ui_change_card_title() {
- var title = $("#card-title").val();
- var card = ui_selected_card();
- if (card) {
- card.title = title;
- $("#selected-card option:selected").text(title);
- ui_render_selected_card();
- }
- }
-
- function ui_change_card_property() {
- var property = $(this).attr("data-property");
- var value = $(this).val();
- var card = ui_selected_card();
- if (card) {
- card[property] = value;
- ui_render_selected_card();
- }
- }
-
- function ui_set_card_color(value) {
- var card = ui_selected_card();
- if (card) {
- card.color = value;
- ui_render_selected_card();
- }
- }
-
- function ui_update_card_color_selector(color, input, selector) {
- if ($(selector + " option[value='" + color + "']").length > 0) {
- // Update the color selector to the entered value
- $(selector).colorselector("setValue", color);
- } else {
- // Unknown color - select a neutral color and reset the text value
- $(selector).colorselector("setValue", "");
- input.val(color);
- }
- }
-
- function ui_change_card_color() {
- var input = $(this);
- var color = input.val();
-
- ui_update_card_color_selector(color, input, "#card_color_selector");
- ui_set_card_color(color);
- }
-
- function ui_change_default_color() {
- var input = $(this);
- var color = input.val();
-
- ui_update_card_color_selector(color, input, "#default_color_selector");
- ui_set_default_color(color);
- }
-
- function ui_change_default_icon() {
- var value = $(this).val();
- card_options.default_icon = value;
- ui_render_selected_card();
- }
-
- function ui_change_card_contents() {
- var value = $(this).val();
-
- var card = ui_selected_card();
- if (card) {
- card.contents = value.split("\n");
- ui_render_selected_card();
- }
- }
-
- function ui_change_default_title_size() {
- card_options.default_title_size = $(this).val();
- ui_render_selected_card();
- }
-
- function ui_change_default_icon_size() {
- card_options.icon_inline = $(this).is(':checked');
- ui_render_selected_card();
- }
-
- function ui_sort_by_name() {
- card_data.sort(function (a, b) { return b.title < a.title });
- ui_update_card_list();
- }
-
- function ui_apply_default_color() {
- for (var i = 0; i < card_data.length; ++i) {
- card_data[i].color = card_options.default_color;
- }
- ui_render_selected_card();
- }
-
- function ui_apply_default_icon() {
- for (var i = 0; i < card_data.length; ++i) {
- card_data[i].icon = card_options.default_icon;
- }
- ui_render_selected_card();
- }
-
- function ui_apply_default_icon_back() {
- for (var i = 0; i < card_data.length; ++i) {
- card_data[i].icon_back = card_options.default_icon;
- }
- ui_render_selected_card();
- }
-
- $(document).ready(function () {
- ui_setup_color_selector();
- $('.icon-list').typeahead({source:icon_names});
-
- $("#button-generate").click(ui_generate);
- $("#button-load").click(function () { $("#file-load").click(); });
- $("#file-load").change(ui_load_files);
- $("#button-clear").click(ui_clear_all);
- $("#button-load-sample").click(ui_load_sample);
- $("#button-save").click(ui_save_file);
- $("#button-sort-name").click(ui_sort_by_name);
- $("#button-add-card").click(ui_add_new_card);
- $("#button-duplicate-card").click(ui_duplicate_card);
- $("#button-delete-card").click(ui_delete_card);
- $("#button-help").click(ui_open_help);
- $("#button-apply-color").click(ui_apply_default_color);
- $("#button-apply-icon").click(ui_apply_default_icon);
- $("#button-apply-icon-back").click(ui_apply_default_icon_back);
-
- $("#selected-card").change(ui_update_selected_card);
-
- $("#card-title").change(ui_change_card_title);
- $("#card-icon").change(ui_change_card_property);
- $("#card-count").change(ui_change_card_property);
- $("#card-icon-back").change(ui_change_card_property);
- $("#card-color").change(ui_change_card_color);
- $("#card-contents").change(ui_change_card_contents);
-
- $("#default-color").change(ui_change_default_color);
- $("#default-icon").change(ui_change_default_icon);
- $("#default-title-size").change(ui_change_default_title_size);
- $("#small-icons").change(ui_change_default_icon_size);
-
- $(".icon-select-button").click(ui_select_icon);
-
- ui_update_card_list();
- });
-
-
|