瀏覽代碼

Update generator

crobi 10 年之前
父節點
當前提交
e40f15bcbe
共有 4 個文件被更改,包括 212 次插入42 次删除
  1. 43
    4
      generator/css/ui.css
  2. 77
    33
      generator/generate.html
  3. 2
    1
      generator/js/cards.js
  4. 90
    4
      generator/js/ui.js

+ 43
- 4
generator/css/ui.css 查看文件

@@ -1,11 +1,37 @@
1 1
 #preview-container {
2
-    padding: 10px;
3
-    border: 10px gray;
2
+    margin: 10px;
4 3
     background-color: white;
5
-    height: 100mm;
6 4
     display: flex;
7
-    flex-direction: row;
8 5
     justify-content: space-around;
6
+    align-items: center;
7
+}
8
+
9
+/* Small screen (preview fills all columns) */
10
+@media (max-width : 1199px) {
11
+    .preview-container {
12
+        flex-direction: row;
13
+    }
14
+    .card {
15
+        margin-right: 10px;
16
+    }
17
+}
18
+/* Large screen (preview fills one column, columns are narrow) */
19
+@media (min-width: 1200px) and (max-width : 1599px) {
20
+    .preview-container {
21
+        flex-direction: column;
22
+    }
23
+    .card {
24
+        margin-bottom: 10px;
25
+    }
26
+}
27
+/* Huge screen (preview fills one column, columns are wide) */
28
+@media (min-width : 1600px) {
29
+    .preview-container {
30
+        flex-direction: row;
31
+    }
32
+    .card {
33
+        margin-right: 10px;
34
+    }
9 35
 }
10 36
 
11 37
 .row-eq-height {
@@ -20,4 +46,17 @@
20 46
     border-radius: 4px !important;
21 47
     border-top-right-radius: 0 !important;
22 48
     border-bottom-right-radius: 0 !important;
49
+}
50
+
51
+.form-group {
52
+    margin-bottom: 10px;
53
+}
54
+
55
+.card h4 {
56
+    /* Revert bootstrap style for the card preview */
57
+    font-weight: bold;
58
+}
59
+
60
+.form-horizontal {
61
+    margin-top: 10px;
23 62
 }

+ 77
- 33
generator/generate.html 查看文件

@@ -42,33 +42,59 @@
42 42
         </div>
43 43
         <div class="row">
44 44
             <div class="col-md-12 col-lg-3">
45
-                <h3>Menu</h3>
46
-                <form role="form">
47
-                    <span class="help-block" id="total_card_count">Deck contains 0 cards.</span>
45
+                <!--<h3>Menu</h3>-->
46
+                <form role="form" class="form-horizontal">
48 47
                     <input type="file" id="file-load" name="files[]" multiple class="form-control" style="display:none" />
49 48
                     <a href="" id="file-save-link" style="display:none">Hidden download link</a>
50
-                    <button type="button" class="btn btn-info btn-block" id="button-help">Open Help</button>
51
-                    <button type="button" class="btn btn-primary btn-block" id="button-load-sample">Load sample cards (discards current data)</button>
52
-                    <button type="button" class="btn btn-primary btn-block" id="button-load">Load cards from file</button>
53
-                    <button type="button" class="btn btn-primary btn-block" id="button-save">Save cards to file</button>
54
-                    <button type="button" class="btn btn-success btn-block" id="button-generate">Generate cards</button>
55
-                    <span class="help-block">Note: generated cards open in a new tab or window.</span>
49
+                    <div class="form-group">
50
+                        <div class="col-sm-6">
51
+                            <button type="button" class="btn btn-info btn-block" id="button-help">Open Help</button>
52
+                        </div>
53
+                        <div class="col-sm-6">
54
+                            <button type="button" class="btn btn-danger btn-block" id="button-clear">Delete all</button>
55
+                        </div>
56
+                    </div>
57
+                    <div class="form-group">
58
+                        <div class="col-sm-6">
59
+                            <button type="button" class="btn btn-primary btn-block" id="button-load-sample">Load sample</button>
60
+                        </div>
61
+                        <div class="col-sm-6">
62
+                            <button type="button" class="btn btn-primary btn-block" id="button-load">Load from file</button>
63
+                        </div>
64
+                    </div>
65
+                    <div class="form-group">
66
+                        <div class="col-sm-6">
67
+                            <button type="button" class="btn btn-primary btn-block" id="button-sort-name">Sort by name</button>
68
+                        </div>
69
+                        <div class="col-sm-6">
70
+                            <button type="button" class="btn btn-primary btn-block" id="button-save">Save to file</button>
71
+                        </div>
72
+                    </div>
73
+                    <div class="form-group">
74
+                        <div class="col-sm-6">
75
+                            <button type="button" class="btn btn-primary btn-block" id="button-sort-icon">Sort by icon</button>
76
+                        </div>
77
+                        <div class="col-sm-6">
78
+                            <button type="button" class="btn btn-success btn-block" id="button-generate">Generate</button>
79
+                        </div>
80
+                    </div>
81
+                    <span class="help-block">Generated cards open in a new tab or window.</span>
56 82
                 </form>
57 83
                 <h3>Default values</h3>
58 84
                 <form role="form" class="form-horizontal">
59 85
                     <div class="form-group">
60
-                        <label for="small-icons" class="col-sm-3 control-label">Small icon</label>
61
-                        <div class="col-sm-9">
86
+                        <label for="small-icons" class="col-sm-2 control-label">Icon</label>
87
+                        <div class="col-sm-10">
62 88
                             <div class="checkbox">
63 89
                                 <label>
64
-                                    <input type="checkbox" checked id="small-icons"> Use small icons on the front
90
+                                    <input type="checkbox" checked id="small-icons"> Use small front icons
65 91
                                 </label>
66 92
                             </div>
67 93
                         </div>
68 94
                     </div>
69 95
                     <div class="form-group">
70
-                        <label for="default-color" class="col-sm-3 control-label">Color</label>
71
-                        <div class="col-sm-9">
96
+                        <label for="default-color" class="col-sm-2 control-label">Color</label>
97
+                        <div class="col-sm-10">
72 98
                             <div class="input-group">
73 99
                                 <select id="default_color_selector" class="colorselector-data"></select>
74 100
                                 <input type="text" id="default-color" class="form-control" placeholder="Card color" data-property="color">
@@ -76,8 +102,8 @@
76 102
                         </div>
77 103
                     </div>
78 104
                     <div class="form-group">
79
-                        <label for="default-icon" class="col-sm-3 control-label">Icon</label>
80
-                        <div class="col-sm-9">
105
+                        <label for="default-icon" class="col-sm-2 control-label">Icon</label>
106
+                        <div class="col-sm-10">
81 107
                             <div class="input-group">
82 108
                                 <span class="input-group-btn">
83 109
                                     <button class="btn btn-default icon-select-button" type="button">Search</button>
@@ -87,26 +113,45 @@
87 113
                         </div>
88 114
                     </div>
89 115
                     <div class="form-group">
90
-                        <label for="default-title-size" class="col-sm-3 control-label">Title size</label>
91
-                        <div class="col-sm-9">
92
-                            <div class="input-group">
93
-                                <select class="form-control" id="default-title-size">
94
-                                    <option value="big">big</option>
95
-                                    <option value="normal" selected>normal</option>
96
-                                    <option value="small">small</option>
97
-                                    <option value="tiny">tiny</option>
98
-                                </select>
99
-                            </div>
116
+                        <label for="default-title-size" class="col-sm-2 control-label">Title</label>
117
+                        <div class="col-sm-10">
118
+                            <select class="form-control" id="default-title-size">
119
+                                <option value="big">big font</option>
120
+                                <option value="normal" selected>normal font</option>
121
+                                <option value="small">small font</option>
122
+                                <option value="tiny">tiny font</option>
123
+                            </select>
124
+                        </div>
125
+                    </div>
126
+                    <div class="form-group">
127
+                        <div class="col-sm-6">
128
+                            <button type="button" class="btn btn-primary btn-block" id="button-apply-color">Apply color</button>
129
+                        </div>
130
+                        <div class="col-sm-6">
131
+                            <button type="button" class="btn btn-primary btn-block" id="button-apply-font">Apply title font</button>
132
+                        </div>
133
+                    </div>
134
+                    <div class="form-group">
135
+                        <div class="col-sm-6">
136
+                            <button type="button" class="btn btn-primary btn-block" id="button-apply-icon">Apply icon</button>
137
+                        </div>
138
+                        <div class="col-sm-6">
139
+                            <button type="button" class="btn btn-primary btn-block" id="button-apply-icon-back">Apply back icon</button>
100 140
                         </div>
101 141
                     </div>
102 142
                 </form>
103 143
             </div>
104 144
             <div class="col-md-12 col-lg-5">
105
-                <h3>Card</h3>
106
-                <span class="help-block">Use this part to edit individual cards.</span>
145
+                <!--<h3>Card</h3>-->
107 146
                 <form class="form-horizontal" role="form">
108 147
                     <div class="form-group">
109
-                        <label for="selected-card" class="col-sm-2 control-label">Selected card</label>
148
+                        <label for="selected-card" class="col-sm-2 control-label">Deck</label>
149
+                        <div class="col-sm-10">
150
+                            <p class="form-control-static" id="total_card_count">Deck contains 0 cards.</p>
151
+                        </div>
152
+                    </div>
153
+                    <div class="form-group">
154
+                        <label for="selected-card" class="col-sm-2 control-label">Card</label>
110 155
                         <div class="col-sm-10">
111 156
                             <select class="form-control" id="selected-card"></select>
112 157
                         </div>
@@ -114,7 +159,7 @@
114 159
                     <div class="form-group">
115 160
                         <label class="col-sm-2 control-label"></label>
116 161
                         <div class="col-sm-4">
117
-                            <button type="button" class="btn btn-danger btn-block" id="button-delete-card">Delete selected card</button>
162
+                            <button type="button" class="btn btn-danger btn-block" id="button-delete-card">Delete card</button>
118 163
                         </div>
119 164
                         <div class="col-sm-3">
120 165
                             <button type="button" class="btn btn-primary btn-block" id="button-add-card">Add new card</button>
@@ -175,9 +220,8 @@
175 220
                 </form>
176 221
             </div>
177 222
             <div class="col-md-12 col-lg-4">
178
-                <h3>Preview</h3>
179
-                <span class="help-block">Preview might not be 100% accurate due to style conflicts.</span>
180
-                <div id="preview-container">
223
+                <!--<h3>Preview</h3>-->
224
+                <div id="preview-container" class="preview-container">
181 225
                 </div>
182 226
             </div>
183 227
         </div>

+ 2
- 1
generator/js/cards.js 查看文件

@@ -132,6 +132,7 @@ var card_element_generators = {
132 132
     subtitle: card_element_subtitle,
133 133
     property: card_element_property,
134 134
     rule: card_element_ruler,
135
+    ruler: card_element_ruler,
135 136
     description: card_element_description,
136 137
     text: card_element_text,
137 138
     fill: card_element_fill,
@@ -152,7 +153,7 @@ function card_generate_contents(contents, card_data, options) {
152 153
         var element_generator = card_element_generators[element_name];
153 154
         if (element_generator) {
154 155
             return element_generator(element_params, card_data, options);
155
-        } else {
156
+        } else if (element_name.length > 0) {
156 157
             return card_element_unknown(element_params, card_data, options);
157 158
         }
158 159
     }).join("\n");

+ 90
- 4
generator/js/ui.js 查看文件

@@ -2,6 +2,37 @@
2 2
 var card_data = [];
3 3
 var card_options = card_default_options();
4 4
 
5
+function mergeSort(arr, compare) {
6
+    if (arr.length < 2)
7
+        return arr;
8
+
9
+    var middle = parseInt(arr.length / 2);
10
+    var left = arr.slice(0, middle);
11
+    var right = arr.slice(middle, arr.length);
12
+
13
+    return merge(mergeSort(left, compare), mergeSort(right, compare), compare);
14
+}
15
+
16
+function merge(left, right, compare) {
17
+    var result = [];
18
+
19
+    while (left.length && right.length) {
20
+        if (compare(left[0], right[0]) <= 0) {
21
+            result.push(left.shift());
22
+        } else {
23
+            result.push(right.shift());
24
+        }
25
+    }
26
+
27
+    while (left.length)
28
+        result.push(left.shift());
29
+
30
+    while (right.length)
31
+        result.push(right.shift());
32
+
33
+    return result;
34
+}
35
+
5 36
 function ui_generate() {
6 37
     // Generate output HTML
7 38
     var card_html = card_pages_generate_html(card_data, card_options);
@@ -55,9 +86,10 @@ function ui_add_new_card() {
55 86
 
56 87
 function ui_duplicate_card() {
57 88
     if (card_data.length > 0) {
58
-        card_data.push(ui_selected_card());
59
-        var card = card_data[card_data.length - 1];
60
-        card.title = card.title + " (Copy)";
89
+        var old_card = ui_selected_card();
90
+        var new_card = $.extend({}, old_card);
91
+        card_data.push(new_card);
92
+        new_card.title = new_card.title + " (Copy)";
61 93
     } else {
62 94
         card_data.push(card_default_data());
63 95
     }
@@ -84,7 +116,7 @@ function ui_delete_card() {
84 116
 }
85 117
 
86 118
 function ui_update_card_list() {
87
-    $("#total_card_count").text("Deck contains " + card_data.length + " cards.");
119
+    $("#total_card_count").text("Deck contains " + card_data.length + " unique cards.");
88 120
 
89 121
     $('#selected-card').empty();
90 122
     for (var i = 0; i < card_data.length; ++i) {
@@ -258,6 +290,53 @@ function ui_change_default_icon_size() {
258 290
     ui_render_selected_card();
259 291
 }
260 292
 
293
+function ui_sort_by_name() {
294
+    card_data = mergeSort(card_data, function (a, b) {
295
+        if (a.title > b.title) {
296
+            return 1;
297
+        }
298
+        if (a.title < b.title) {
299
+            return -1;
300
+        }
301
+        return 0;
302
+    });
303
+    ui_update_card_list();
304
+}
305
+
306
+function ui_sort_by_icon() {
307
+    card_data = mergeSort(card_data, function (a, b) {
308
+        if (a.icon > b.icon) {
309
+            return 1;
310
+        }
311
+        if (a.icon < b.icon) {
312
+            return -1;
313
+        }
314
+        return 0;
315
+    });
316
+    ui_update_card_list();
317
+}
318
+
319
+function ui_apply_default_color() {
320
+    for (var i = 0; i < card_data.length; ++i) {
321
+        card_data[i].color = card_options.default_color;
322
+    }
323
+    ui_render_selected_card();
324
+}
325
+
326
+function ui_apply_default_icon() {
327
+    for (var i = 0; i < card_data.length; ++i) {
328
+        card_data[i].icon = card_options.default_icon;
329
+    }
330
+    ui_render_selected_card();
331
+}
332
+
333
+function ui_apply_default_icon_back() {
334
+    for (var i = 0; i < card_data.length; ++i) {
335
+        card_data[i].icon_back = card_options.default_icon;
336
+    }
337
+    ui_render_selected_card();
338
+}
339
+
261 340
 $(document).ready(function () {
262 341
     ui_setup_color_selector();
263 342
     $('.icon-list').typeahead({source:icon_names});
@@ -265,12 +344,19 @@ $(document).ready(function () {
265 344
     $("#button-generate").click(ui_generate);
266 345
     $("#button-load").click(function () { $("#file-load").click(); });
267 346
     $("#file-load").change(ui_load_files);
347
+    $("#button-clear").click(ui_clear_all);
268 348
     $("#button-load-sample").click(ui_load_sample);
269 349
     $("#button-save").click(ui_save_file);
350
+    $("#button-sort-name").click(ui_sort_by_name);
351
+    $("#button-sort-icon").click(ui_sort_by_icon);
270 352
     $("#button-add-card").click(ui_add_new_card);
271 353
     $("#button-duplicate-card").click(ui_duplicate_card);
272 354
     $("#button-delete-card").click(ui_delete_card);
273 355
     $("#button-help").click(ui_open_help);
356
+    $("#button-apply-color").click(ui_apply_default_color);
357
+    $("#button-apply-icon").click(ui_apply_default_icon);
358
+    $("#button-apply-icon-back").click(ui_apply_default_icon_back);
359
+
274 360
     $("#selected-card").change(ui_update_selected_card);
275 361
 
276 362
     $("#card-title").change(ui_change_card_title);

Loading…
取消
儲存