浏览代码

Add options

crobi 10 年前
父节点
当前提交
ac09f2382d
共有 3 个文件被更改,包括 93 次插入57 次删除
  1. 21
    3
      generator/css/cards.css
  2. 1
    1
      generator/data/card_data_example.js
  3. 71
    53
      generator/js/cards.js

+ 21
- 3
generator/css/cards.css 查看文件

78
     border-color: inherit;
78
     border-color: inherit;
79
 }
79
 }
80
 
80
 
81
+.title-inlineicon {
82
+    width: 7mm;
83
+    height: 7mm;
84
+    background-repeat: no-repeat;
85
+    background-size: contain;
86
+    background-color: inherit;
87
+    border-color: inherit;
88
+}
89
+.title-inlineicon-container {
90
+    position: absolute;
91
+    right: -1mm;
92
+    top: -1mm;
93
+    border: 1mm solid;
94
+    border-radius: 1mm;
95
+    background-color: inherit;
96
+    border-color: inherit;
97
+}
98
+
81
 .title {
99
 .title {
82
-    height: 28px;
83
-    line-height: 23px;
100
+    height: 8mm;
101
+    line-height: 6mm;
84
     padding-left: 2mm;
102
     padding-left: 2mm;
85
     font-family: Lora, 'Calisto MT', 'Bookman Old Style', Bookman, 'Goudy Old Style', Garamond, 'Hoefler Text', 'Bitstream Charter', Georgia, serif;
103
     font-family: Lora, 'Calisto MT', 'Bookman Old Style', Bookman, 'Goudy Old Style', Garamond, 'Hoefler Text', 'Bitstream Charter', Georgia, serif;
86
     font-variant: small-caps;
104
     font-variant: small-caps;
87
     font-weight: bold;
105
     font-weight: bold;
88
-    font-size: 13pt;
106
+    font-size: 14pt;
89
     background-color: inherit;
107
     background-color: inherit;
90
     color: white;
108
     color: white;
91
 }
109
 }

+ 1
- 1
generator/data/card_data_example.js 查看文件

2
     {
2
     {
3
         "count": 1,
3
         "count": 1,
4
         "color": "maroon",
4
         "color": "maroon",
5
-        "title": "Burning Hands",
5
+        "title": "Protection from Energy",
6
         "icon": "custom-spell-1",
6
         "icon": "custom-spell-1",
7
         "icon_back": "custom-class-arcane",
7
         "icon_back": "custom-class-arcane",
8
         "contents": [
8
         "contents": [

+ 71
- 53
generator/js/cards.js 查看文件

1
+// ============================================================================
2
+// Card definition related functions
3
+// ============================================================================
4
+function card_default_options() {
5
+    return {
6
+        default_color: "black",
7
+        default_icon: "ace",
8
+        page_size: "A4",
9
+        page_rows: 3,
10
+        page_columns: 3,
11
+        icon_inline: true
12
+    }
13
+}
14
+
1
 // ============================================================================
15
 // ============================================================================
2
 // Card definition related functions
16
 // Card definition related functions
3
 // ============================================================================
17
 // ============================================================================
4
 
18
 
5
-function card_data_color_front(card_data) {
6
-    return card_data.color_front || card_data.color || "black";
19
+function card_data_color_front(card_data, options) {
20
+    return card_data.color_front || card_data.color || options.default_color || "black";
7
 }
21
 }
8
 
22
 
9
-function card_data_color_back(card_data) {
10
-    return card_data.color_back || card_data.color || "black";
23
+function card_data_color_back(card_data, options) {
24
+    return card_data.color_back || card_data.color || options.default_color || "black";
11
 }
25
 }
12
 
26
 
13
-function card_data_icon_front(card_data) {
14
-    return card_data.icon_front || card_data.icon || "ace";
27
+function card_data_icon_front(card_data, options) {
28
+    return card_data.icon_front || card_data.icon || options.default_icon || "ace";
15
 }
29
 }
16
 
30
 
17
-function card_data_icon_back(card_data) {
18
-    return card_data.icon_back || card_data.icon || "ace";
31
+function card_data_icon_back(card_data, options) {
32
+    return card_data.icon_back || card_data.icon || options.default_icon || "ace";
19
 }
33
 }
20
 
34
 
21
 // ============================================================================
35
 // ============================================================================
22
 // Card element generating functions
36
 // Card element generating functions
23
 // ============================================================================
37
 // ============================================================================
24
 
38
 
25
-function card_element_title(card_data) {
39
+function card_element_title(card_data, options) {
26
     var title = card_data.title || "";
40
     var title = card_data.title || "";
27
     return '<div class="title">' + title + '</div>';
41
     return '<div class="title">' + title + '</div>';
28
 }
42
 }
29
 
43
 
30
-function card_element_icon(card_data) {
31
-    var icon = card_data_icon_front(card_data);
32
-    var result = "";
33
-    if (icon) {
34
-        result += '<div class="title-icon-container">';
35
-        result += '    <div class="title-icon icon-' + icon + '">';
36
-        result += '    </div>';
37
-        result += '</div>';
44
+function card_element_icon(card_data, options) {
45
+    var icon = card_data_icon_front(card_data, options);
46
+    var classname = "icon";
47
+    if (options.icon_inline) {
48
+        classname = "inlineicon";
38
     }
49
     }
50
+
51
+    var result = "";
52
+    result += '<div class="title-'+classname+'-container">';
53
+    result += '    <div class="title-' + classname + ' icon-' + icon + '">';
54
+    result += '    </div>';
55
+    result += '</div>';
39
     return result;
56
     return result;
40
 }
57
 }
41
 
58
 
42
-function card_element_subtitle(params, card_data) {
59
+function card_element_subtitle(params, card_data, options) {
43
     var subtitle = params[0] || "";
60
     var subtitle = params[0] || "";
44
     return '<div class="subtitle">' + subtitle + '</div>';
61
     return '<div class="subtitle">' + subtitle + '</div>';
45
 }
62
 }
46
 
63
 
47
-function card_element_ruler(params, card_data) {
48
-    var color = card_data_color_front(card_data);
64
+function card_element_ruler(params, card_data, options) {
65
+    var color = card_data_color_front(card_data, options);
49
     var fill = 'fill="' + color + '"';
66
     var fill = 'fill="' + color + '"';
50
     var stroke = 'stroke="' + color + '"';
67
     var stroke = 'stroke="' + color + '"';
51
 
68
 
56
     return result;
73
     return result;
57
 }
74
 }
58
 
75
 
59
-function card_element_property(params, card_data) {
76
+function card_element_property(params, card_data, options) {
60
     var result = "";
77
     var result = "";
61
     result += '<div class="property-line">';
78
     result += '<div class="property-line">';
62
     result += '   <h4 class="property-name">' + params[0] + '</h4>';
79
     result += '   <h4 class="property-name">' + params[0] + '</h4>';
65
     return result;
82
     return result;
66
 }
83
 }
67
 
84
 
68
-function card_element_description(params, card_data) {
85
+function card_element_description(params, card_data, options) {
69
     var result = "";
86
     var result = "";
70
     result += '<div class="description-line">';
87
     result += '<div class="description-line">';
71
     result += '   <h4 class="description-name">' + params[0] + '</h4>';
88
     result += '   <h4 class="description-name">' + params[0] + '</h4>';
74
     return result;
91
     return result;
75
 }
92
 }
76
 
93
 
77
-function card_element_text(params, card_data) {
94
+function card_element_text(params, card_data, options) {
78
     var result = "";
95
     var result = "";
79
     result += '<div class="description-line">';
96
     result += '<div class="description-line">';
80
     result += '   <p class="description-text">' + params[0] + '</p>';
97
     result += '   <p class="description-text">' + params[0] + '</p>';
82
     return result;
99
     return result;
83
 }
100
 }
84
 
101
 
85
-function card_element_section(params, card_data) {
86
-    var color = card_data.color_front || card_data.color;
102
+function card_element_section(params, card_data, options) {
103
+    var color = card_data_color_front(card_data, options);
87
     var section = params[0] || "";
104
     var section = params[0] || "";
88
     return '<h3 style="color:' + color + '">' + section + '</h3>';
105
     return '<h3 style="color:' + color + '">' + section + '</h3>';
89
 }
106
 }
90
 
107
 
91
-function card_element_fill(params, card_data) {
108
+function card_element_fill(params, card_data, options) {
92
     var flex = params[0] || "1";
109
     var flex = params[0] || "1";
93
     return '<div class="fill" style="flex:' + flex + '"></div>';
110
     return '<div class="fill" style="flex:' + flex + '"></div>';
94
 }
111
 }
95
 
112
 
96
-function card_element_unknown(params, card_data) {
97
-    return '<div>' + params.join('<br />') + '</div>';
113
+function card_element_unknown(params, card_data, options) {
114
+    return '<div>Unknown element: ' + params.join('<br />') + '</div>';
98
 }
115
 }
99
 
116
 
100
 var card_element_generators = {
117
 var card_element_generators = {
111
 // Card generating functions
128
 // Card generating functions
112
 // ============================================================================
129
 // ============================================================================
113
 
130
 
114
-function card_generate_contents(contents, card_data) {
131
+function card_generate_contents(contents, card_data, options) {
115
     var result = "";
132
     var result = "";
116
     result += '<div class="content-container">';
133
     result += '<div class="content-container">';
117
     result += contents.map(function (value) {
134
     result += contents.map(function (value) {
120
         var element_params = parts.splice(1);
137
         var element_params = parts.splice(1);
121
         var element_generator = card_element_generators[element_name];
138
         var element_generator = card_element_generators[element_name];
122
         if (element_generator) {
139
         if (element_generator) {
123
-            return element_generator(element_params, card_data);
140
+            return element_generator(element_params, card_data, options);
124
         } else {
141
         } else {
125
-            return card_element_unknown(element_params, card_data);
142
+            return card_element_unknown(element_params, card_data, options);
126
         }
143
         }
127
     }).join("\n");
144
     }).join("\n");
128
     result += '</div>';
145
     result += '</div>';
137
     return result;
154
     return result;
138
 }
155
 }
139
 
156
 
140
-function card_generate_color_style(color) {
157
+function card_generate_color_style(color, options) {
141
     return 'style="color:' + color + '; border-color:' + color + '; background-color:' + color + '"';
158
     return 'style="color:' + color + '; border-color:' + color + '; background-color:' + color + '"';
142
 }
159
 }
143
 
160
 
144
-function card_generate_color_gradient_style(color) {
161
+function card_generate_color_gradient_style(color, options) {
145
     return 'style="background: radial-gradient(ellipse at center, white 20%, ' + color + ' 120%)"';
162
     return 'style="background: radial-gradient(ellipse at center, white 20%, ' + color + ' 120%)"';
146
 }
163
 }
147
 
164
 
148
-function card_generate_front(data) {
149
-    var color = card_data_color_front(data);
150
-    var style_color = card_generate_color_style(color);
165
+function card_generate_front(data, options) {
166
+    var color = card_data_color_front(data, options);
167
+    var style_color = card_generate_color_style(color, options);
151
     var count = data.count || 1;
168
     var count = data.count || 1;
152
 
169
 
153
     var result = "";
170
     var result = "";
154
     result += '<div class="card" ' + style_color + '>';
171
     result += '<div class="card" ' + style_color + '>';
155
-    result += card_element_icon(data);
156
-    result += card_element_title(data);
157
-    result += card_generate_contents(data.contents, data);
172
+    result += card_element_icon(data, options);
173
+    result += card_element_title(data, options);
174
+    result += card_generate_contents(data.contents, data, options);
158
     result += '</div>';
175
     result += '</div>';
159
 
176
 
160
     return card_repeat(result, count);
177
     return card_repeat(result, count);
161
 }
178
 }
162
 
179
 
163
-function card_generate_back(data) {
164
-    var color = card_data_color_back(data)
165
-    var style_color = card_generate_color_style(color);
166
-    var style_gradient = card_generate_color_gradient_style(color);
167
-    var icon = card_data_icon_back(data);
180
+function card_generate_back(data, options) {
181
+    var color = card_data_color_back(data, options)
182
+    var style_color = card_generate_color_style(color, options);
183
+    var style_gradient = card_generate_color_gradient_style(color, options);
184
+    var icon = card_data_icon_back(data, options);
168
     var count = data.count || 1;
185
     var count = data.count || 1;
169
 
186
 
170
     var result = "";
187
     var result = "";
179
     return card_repeat(result, count);
196
     return card_repeat(result, count);
180
 }
197
 }
181
 
198
 
182
-function card_generate_empty(count) {
199
+function card_generate_empty(count, options) {
183
     var style_color = card_generate_color_style("white");
200
     var style_color = card_generate_color_style("white");
184
 
201
 
185
     var result = "";
202
     var result = "";
233
     }
250
     }
234
 }
251
 }
235
 
252
 
236
-function card_pages_wrap(pages) {
237
-    var size = "A4";
253
+function card_pages_wrap(pages, options) {
254
+    var size = options.page_size || "A4";
238
 
255
 
239
     var result = "";
256
     var result = "";
240
     for (var i = 0; i < pages.length; ++i) {
257
     for (var i = 0; i < pages.length; ++i) {
245
     return result;
262
     return result;
246
 }
263
 }
247
 
264
 
248
-function card_pages_generate_html(card_data) {
249
-    var rows = 3;
250
-    var cols = 3;
265
+function card_pages_generate_html(card_data, options) {
266
+    options = options || card_default_options();
267
+    var rows = options.page_rows || 3;
268
+    var cols = options.page_columns || 3;
251
 
269
 
252
     // Generate the HTML for each card
270
     // Generate the HTML for each card
253
     var front_cards = [];
271
     var front_cards = [];
254
     var back_cards = [];
272
     var back_cards = [];
255
     card_data.forEach(function (data) {
273
     card_data.forEach(function (data) {
256
-        front_cards = front_cards.concat(card_generate_front(data));
257
-        back_cards = back_cards.concat(card_generate_back(data));
274
+        front_cards = front_cards.concat(card_generate_front(data, options));
275
+        back_cards = back_cards.concat(card_generate_back(data, options));
258
     });
276
     });
259
 
277
 
260
     // Add padding cards so that the last page is full of cards
278
     // Add padding cards so that the last page is full of cards
274
     var pages = card_pages_merge(front_pages, back_pages);
292
     var pages = card_pages_merge(front_pages, back_pages);
275
 
293
 
276
     // Wrap all pages in a <page> element
294
     // Wrap all pages in a <page> element
277
-    return card_pages_wrap(pages);
295
+    return card_pages_wrap(pages, options);
278
 }
296
 }
279
 
297
 
280
 function card_pages_insert_into(card_data, container) {
298
 function card_pages_insert_into(card_data, container) {

正在加载...
取消
保存