소스 검색

Download all as ZIP, adjust layout on resize

Scott Lahteine 9 년 전
부모
커밋
3aa5f98b64

+ 6
- 6
Marlin/configurator/config/boards.h 파일 보기

@@ -10,10 +10,10 @@
10 10
 #define BOARD_CHEAPTRONIC       2    // Cheaptronic v1.0
11 11
 #define BOARD_SETHI             20   // Sethi 3D_1
12 12
 #define BOARD_RAMPS_OLD         3    // MEGA/RAMPS up to 1.2
13
-#define BOARD_RAMPS_13_EFB      33   // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)
14
-#define BOARD_RAMPS_13_EEB      34   // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Bed)
15
-#define BOARD_RAMPS_13_EFF      35   // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Fan)
16
-#define BOARD_RAMPS_13_EEF      36   // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Fan)
13
+#define BOARD_RAMPS_13_EFB      33   // RAMPS 1.3 / 1.4 (Extruder, Fan, Bed)
14
+#define BOARD_RAMPS_13_EEB      34   // RAMPS 1.3 / 1.4 (Extruder0, Extruder1, Bed)
15
+#define BOARD_RAMPS_13_EFF      35   // RAMPS 1.3 / 1.4 (Extruder, Fan, Fan)
16
+#define BOARD_RAMPS_13_EEF      36   // RAMPS 1.3 / 1.4 (Extruder0, Extruder1, Fan)
17 17
 #define BOARD_DUEMILANOVE_328P  4    // Duemilanove w/ ATMega328P pin assignments
18 18
 #define BOARD_GEN6              5    // Gen6
19 19
 #define BOARD_GEN6_DELUXE       51   // Gen6 deluxe
@@ -28,8 +28,8 @@
28 28
 #define BOARD_ULTIMAKER         7    // Ultimaker
29 29
 #define BOARD_ULTIMAKER_OLD     71   // Ultimaker (Older electronics. Pre 1.5.4. This is rare)
30 30
 #define BOARD_ULTIMAIN_2        72   // Ultimainboard 2.x (Uses TEMP_SENSOR 20)
31
-#define BOARD_3DRAG             77   // 3Drag Controller
32
-#define BOARD_K8200             78   // Vellemann K8200 Controller (derived from 3Drag Controller)
31
+#define BOARD_3DRAG             77   // 3Drag
32
+#define BOARD_K8200             78   // Vellemann K8200 (derived from 3Drag)
33 33
 #define BOARD_TEENSYLU          8    // Teensylu
34 34
 #define BOARD_RUMBA             80   // Rumba
35 35
 #define BOARD_PRINTRBOARD       81   // Printrboard (AT90USB1286)

+ 228
- 0
Marlin/configurator/config/language.h 파일 보기

@@ -0,0 +1,228 @@
1
+#ifndef LANGUAGE_H
2
+#define LANGUAGE_H
3
+
4
+#include "Configuration.h"
5
+
6
+#define LANGUAGE_CONCAT(M)       #M
7
+#define GENERATE_LANGUAGE_INCLUDE(M)  LANGUAGE_CONCAT(language_##M.h)
8
+
9
+
10
+// NOTE: IF YOU CHANGE LANGUAGE FILES OR MERGE A FILE WITH CHANGES
11
+//
12
+//   ==> ALWAYS TRY TO COMPILE MARLIN WITH/WITHOUT "ULTIPANEL" / "ULTRALCD" / "SDSUPPORT" #define IN "Configuration.h"
13
+//   ==> ALSO TRY ALL AVAILABLE LANGUAGE OPTIONS
14
+
15
+// Languages
16
+// en    English
17
+// pl    Polish
18
+// fr    French
19
+// de    German
20
+// es    Spanish
21
+// ru    Russian
22
+// it    Italian
23
+// pt    Portuguese
24
+// pt-br Portuguese (Brazil)
25
+// fi    Finnish
26
+// an    Aragonese
27
+// nl    Dutch
28
+// ca    Catalan
29
+// eu    Basque-Euskera
30
+
31
+#ifndef LANGUAGE_INCLUDE
32
+  // pick your language from the list above
33
+  #define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
34
+#endif
35
+
36
+#define PROTOCOL_VERSION "1.0"
37
+#define FIRMWARE_URL "https://github.com/MarlinFirmware/Marlin"
38
+
39
+#if MB(ULTIMAKER)|| MB(ULTIMAKER_OLD)|| MB(ULTIMAIN_2)
40
+  #define MACHINE_NAME "Ultimaker"
41
+  #define FIRMWARE_URL "http://firmware.ultimaker.com"
42
+#elif MB(RUMBA)
43
+  #define MACHINE_NAME "Rumba"
44
+#elif MB(3DRAG)
45
+  #define MACHINE_NAME "3Drag"
46
+  #define FIRMWARE_URL "http://3dprint.elettronicain.it/"
47
+#elif MB(K8200)
48
+  #define MACHINE_NAME "K8200"
49
+#elif MB(5DPRINT)
50
+  #define MACHINE_NAME "Makibox"
51
+#elif MB(SAV_MKI)
52
+  #define MACHINE_NAME "SAV MkI"
53
+  #define FIRMWARE_URL "https://github.com/fmalpartida/Marlin/tree/SAV-MkI-config"
54
+#elif MB(WITBOX)
55
+  #define MACHINE_NAME "WITBOX"
56
+  #define FIRMWARE_URL "http://www.bq.com/gb/downloads-witbox.html"
57
+#elif MB(HEPHESTOS)
58
+  #define MACHINE_NAME "HEPHESTOS"
59
+  #define FIRMWARE_URL "http://www.bq.com/gb/downloads-prusa-i3-hephestos.html"
60
+#else // Default firmware set to Mendel
61
+  #define MACHINE_NAME "Mendel"
62
+#endif
63
+
64
+#ifdef CUSTOM_MENDEL_NAME
65
+  #define MACHINE_NAME CUSTOM_MENDEL_NAME
66
+#endif
67
+
68
+#ifndef MACHINE_UUID
69
+   #define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
70
+#endif
71
+
72
+
73
+#define STRINGIFY_(n) #n
74
+#define STRINGIFY(n) STRINGIFY_(n)
75
+
76
+
77
+// Common LCD messages
78
+
79
+  /* nothing here yet */
80
+
81
+// Common serial messages
82
+#define MSG_MARLIN "Marlin"
83
+
84
+// Serial Console Messages (do not translate those!)
85
+
86
+#define MSG_Enqueing                        "enqueing \""
87
+#define MSG_POWERUP                         "PowerUp"
88
+#define MSG_EXTERNAL_RESET                  " External Reset"
89
+#define MSG_BROWNOUT_RESET                  " Brown out Reset"
90
+#define MSG_WATCHDOG_RESET                  " Watchdog Reset"
91
+#define MSG_SOFTWARE_RESET                  " Software Reset"
92
+#define MSG_AUTHOR                          " | Author: "
93
+#define MSG_CONFIGURATION_VER               " Last Updated: "
94
+#define MSG_FREE_MEMORY                     " Free Memory: "
95
+#define MSG_PLANNER_BUFFER_BYTES            "  PlannerBufferBytes: "
96
+#define MSG_OK                              "ok"
97
+#define MSG_FILE_SAVED                      "Done saving file."
98
+#define MSG_ERR_LINE_NO                     "Line Number is not Last Line Number+1, Last Line: "
99
+#define MSG_ERR_CHECKSUM_MISMATCH           "checksum mismatch, Last Line: "
100
+#define MSG_ERR_NO_CHECKSUM                 "No Checksum with line number, Last Line: "
101
+#define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No Line Number with checksum, Last Line: "
102
+#define MSG_FILE_PRINTED                    "Done printing file"
103
+#define MSG_BEGIN_FILE_LIST                 "Begin file list"
104
+#define MSG_END_FILE_LIST                   "End file list"
105
+#define MSG_M104_INVALID_EXTRUDER           "M104 Invalid extruder "
106
+#define MSG_M105_INVALID_EXTRUDER           "M105 Invalid extruder "
107
+#define MSG_M200_INVALID_EXTRUDER           "M200 Invalid extruder "
108
+#define MSG_M218_INVALID_EXTRUDER           "M218 Invalid extruder "
109
+#define MSG_M221_INVALID_EXTRUDER           "M221 Invalid extruder "
110
+#define MSG_ERR_NO_THERMISTORS              "No thermistors - no temperature"
111
+#define MSG_M109_INVALID_EXTRUDER           "M109 Invalid extruder "
112
+#define MSG_HEATING                         "Heating..."
113
+#define MSG_HEATING_COMPLETE                "Heating done."
114
+#define MSG_BED_HEATING                     "Bed Heating."
115
+#define MSG_BED_DONE                        "Bed done."
116
+#define MSG_M115_REPORT                     "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
117
+#define MSG_COUNT_X                         " Count X: "
118
+#define MSG_ERR_KILLED                      "Printer halted. kill() called!"
119
+#define MSG_ERR_STOPPED                     "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
120
+#define MSG_RESEND                          "Resend: "
121
+#define MSG_UNKNOWN_COMMAND                 "Unknown command: \""
122
+#define MSG_ACTIVE_EXTRUDER                 "Active Extruder: "
123
+#define MSG_INVALID_EXTRUDER                "Invalid extruder"
124
+#define MSG_X_MIN                           "x_min: "
125
+#define MSG_X_MAX                           "x_max: "
126
+#define MSG_Y_MIN                           "y_min: "
127
+#define MSG_Y_MAX                           "y_max: "
128
+#define MSG_Z_MIN                           "z_min: "
129
+#define MSG_Z_MAX                           "z_max: "
130
+#define MSG_M119_REPORT                     "Reporting endstop status"
131
+#define MSG_ENDSTOP_HIT                     "TRIGGERED"
132
+#define MSG_ENDSTOP_OPEN                    "open"
133
+#define MSG_HOTEND_OFFSET                   "Hotend offsets:"
134
+
135
+#define MSG_SD_CANT_OPEN_SUBDIR             "Cannot open subdir"
136
+#define MSG_SD_INIT_FAIL                    "SD init fail"
137
+#define MSG_SD_VOL_INIT_FAIL                "volume.init failed"
138
+#define MSG_SD_OPENROOT_FAIL                "openRoot failed"
139
+#define MSG_SD_CARD_OK                      "SD card ok"
140
+#define MSG_SD_WORKDIR_FAIL                 "workDir open failed"
141
+#define MSG_SD_OPEN_FILE_FAIL               "open failed, File: "
142
+#define MSG_SD_FILE_OPENED                  "File opened: "
143
+#define MSG_SD_SIZE                         " Size: "
144
+#define MSG_SD_FILE_SELECTED                "File selected"
145
+#define MSG_SD_WRITE_TO_FILE                "Writing to file: "
146
+#define MSG_SD_PRINTING_BYTE                "SD printing byte "
147
+#define MSG_SD_NOT_PRINTING                 "Not SD printing"
148
+#define MSG_SD_ERR_WRITE_TO_FILE            "error writing to file"
149
+#define MSG_SD_CANT_ENTER_SUBDIR            "Cannot enter subdir: "
150
+
151
+#define MSG_STEPPER_TOO_HIGH                "Steprate too high: "
152
+#define MSG_ENDSTOPS_HIT                    "endstops hit: "
153
+#define MSG_ERR_COLD_EXTRUDE_STOP           " cold extrusion prevented"
154
+#define MSG_ERR_LONG_EXTRUDE_STOP           " too long extrusion prevented"
155
+#define MSG_BABYSTEPPING_X                  "Babystepping X"
156
+#define MSG_BABYSTEPPING_Y                  "Babystepping Y"
157
+#define MSG_BABYSTEPPING_Z                  "Babystepping Z"
158
+#define MSG_SERIAL_ERROR_MENU_STRUCTURE     "Error in menu structure"
159
+
160
+#define MSG_ERR_EEPROM_WRITE                "Error writing to EEPROM!"
161
+
162
+// LCD Menu Messages
163
+
164
+// Add your own character. Reference: https://github.com/MarlinFirmware/Marlin/pull/1434 photos
165
+//                                and https://www.sparkfun.com/datasheets/LCD/HD44780.pdf page 17-18
166
+#ifdef DOGLCD
167
+  #define STR_Ae "\304"               // 'Ä' U8glib
168
+  #define STR_ae "\344"               // 'ä'
169
+  #define STR_Oe "\326"               // 'Ö'
170
+  #define STR_oe STR_Oe               // 'ö'
171
+  #define STR_Ue "\334"               // 'Ü'
172
+  #define STR_ue STR_Ue               // 'ü'
173
+  #define STR_sz "\337"               // 'ß'
174
+  #define STR_h2 "\262"               // '²'
175
+  #define STR_h3 "\263"               // '³'
176
+  #define STR_Deg "\260"              // '°'
177
+  #define STR_THERMOMETER "\377"
178
+#else
179
+  #ifdef DISPLAY_CHARSET_HD44780_JAPAN // HD44780 ROM Code: A00 (Japan)
180
+    #define STR_ae "\xe1"
181
+    #define STR_Ae STR_ae
182
+    #define STR_oe "\357"
183
+    #define STR_Oe STR_oe
184
+    #define STR_ue "\365"
185
+    #define STR_Ue STR_ue
186
+    #define STR_sz "\342"
187
+    #define STR_h2 "2"
188
+    #define STR_h3 "3"
189
+    #define STR_Deg "\271"
190
+    #define STR_THERMOMETER "\002"
191
+  #endif
192
+  #ifdef DISPLAY_CHARSET_HD44780_WESTERN // HD44780 ROM Code: A02 (Western)
193
+    #define STR_Ae "\216"
194
+    #define STR_ae "\204"
195
+    #define STR_Oe "\211"
196
+    #define STR_oe "\204"
197
+    #define STR_Ue "\212"
198
+    #define STR_ue "\201"
199
+    #define STR_sz "\160"
200
+    #define STR_h2 "\262"
201
+    #define STR_h3 "\263"
202
+    #define STR_Deg "\337"
203
+    #define STR_THERMOMETER "\002"
204
+  #endif
205
+#endif
206
+/*
207
+#define TESTSTRING000 "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017"
208
+#define TESTSTRING020 "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
209
+#define TESTSTRING040 "\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057"
210
+#define TESTSTRING060 "\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077"
211
+#define TESTSTRING100 "\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117"
212
+#define TESTSTRING120 "\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137"
213
+#define TESTSTRING140 "\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157"
214
+#define TESTSTRING160 "\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177"
215
+#define TESTSTRING200 "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217"
216
+#define TESTSTRING220 "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237"
217
+#define TESTSTRING240 "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257"
218
+#define TESTSTRING260 "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277"
219
+#define TESTSTRING300 "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317"
220
+#define TESTSTRING320 "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337"
221
+#define TESTSTRING340 "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357"
222
+#define TESTSTRING360 "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
223
+*/
224
+
225
+#include LANGUAGE_INCLUDE
226
+#include "language_en.h"
227
+
228
+#endif //__LANGUAGE_H

+ 13
- 7
Marlin/configurator/css/configurator.css 파일 보기

@@ -23,8 +23,8 @@ pre {
23 23
 
24 24
 body { margin: 0; padding: 0; background: #56A; color: #000; font-family: monospace; }
25 25
 #main {
26
-	max-width: 1000px;
27
-	margin: 0 auto;
26
+	max-width: 1100px;
27
+	margin: 0 auto 10px;
28 28
  	padding: 0 2%; width: 96%;
29 29
 	}
30 30
 
@@ -32,9 +32,10 @@ h1, h2, h3, h4, h5, h6 { clear: both; }
32 32
 
33 33
 h1, p.info { font-family: sans-serif; }
34 34
 h1 {
35
-	background: transparent url(logo.png) right top no-repeat;
36 35
 	height: 38px;
37 36
 	margin-bottom: -30px;
37
+	color: #FFF;
38
+	background: transparent url(logo.png) right top no-repeat;
38 39
 	}
39 40
 p.info { padding: 0; color: #000; }
40 41
 p.info span { color: #800; }
@@ -72,7 +73,8 @@ img { display: none; }
72 73
 	padding: 6px 20px 20px;
73 74
 	color: #000;
74 75
 	position: relative;
75
-	border-top-right-radius: 1.5em;
76
+	border-radius: 1.5em;
77
+	border-top-left-radius: 0;
76 78
 	}
77 79
 fieldset {
78 80
 	height: 16.1em;
@@ -235,7 +237,7 @@ h2 {
235 237
 
236 238
 /* Disclosure Widget */
237 239
 
238
-span.disclose, a.download {︎
240
+span.disclose, a.download, a.download-all {︎
239 241
 	display: block;
240 242
 	float: right;
241 243
 	margin-top: 12px;
@@ -278,7 +280,7 @@ span.disclose.closed.almost {
278 280
 
279 281
 /* Download Button */
280 282
 
281
-a.download {
283
+a.download, a.download-all {
282 284
 	visibility: hidden;
283 285
 	padding: 2px;
284 286
 	border: 1px solid #494;
@@ -291,8 +293,9 @@ a.download {
291 293
 	font-weight: bold;
292 294
 	text-decoration: none;
293 295
 	}
296
+a.download-all { margin: 9px 2em 0; color: #449; border-color: #449; }
294 297
 
295
-@media all and (min-width: 1100px) {
298
+@media all and (min-width: 1140px) {
296 299
 
297 300
 	#main { max-width: 10000px; }
298 301
 
@@ -301,4 +304,7 @@ a.download {
301 304
 	#config_text, #config_adv_text { float: right; clear: right; width: 45%; }
302 305
 
303 306
 	pre.config { height: 20em; }
307
+
308
+	.disclose { display: none; }
309
+
304 310
 }

+ 7
- 1
Marlin/configurator/index.html 파일 보기

@@ -7,6 +7,8 @@
7 7
     <script src="js/jquery-2.1.3.min.js"></script>
8 8
     <script src="js/binarystring.js"></script>
9 9
     <script src="js/binaryfileuploader.js"></script>
10
+    <script src="js/FileSaver.min.js"></script>
11
+    <script src="js/jszip.min.js"></script>
10 12
     <script src="js/jcanvas.js"></script>
11 13
     <script src="js/jstepper.js"></script>
12 14
     <script src="js/configurator.js"></script>
@@ -26,7 +28,7 @@
26 28
 
27 29
         <label>Drop Files Here:</label><input type="file" id="file-upload" />
28 30
         <label id="tipson"><input type="checkbox" checked /> ?</label>
29
-        <br class="clear" />
31
+        <a href="" class="download-all">Download Zip</a>
30 32
 
31 33
         <fieldset id="machine">
32 34
           <legend>Machine</legend>
@@ -89,6 +91,10 @@
89 91
           <legend>Extras</legend>
90 92
         </fieldset>
91 93
 
94
+        <fieldset id="info">
95
+          <legend>Info</legend>
96
+        </fieldset>
97
+
92 98
         <fieldset id="more">
93 99
           <legend>More…</legend>
94 100
         </fieldset>

+ 2
- 0
Marlin/configurator/js/FileSaver.min.js 파일 보기

@@ -0,0 +1,2 @@
1
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
2
+var saveAs=saveAs||typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob&&navigator.msSaveOrOpenBlob.bind(navigator)||function(view){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var doc=view.document,get_URL=function(){return view.URL||view.webkitURL||view},save_link=doc.createElementNS("http://www.w3.org/1999/xhtml","a"),can_use_save_link="download"in save_link,click=function(node){var event=doc.createEvent("MouseEvents");event.initMouseEvent("click",true,false,view,0,0,0,0,0,false,false,false,false,0,null);node.dispatchEvent(event)},webkit_req_fs=view.webkitRequestFileSystem,req_fs=view.requestFileSystem||webkit_req_fs||view.mozRequestFileSystem,throw_outside=function(ex){(view.setImmediate||view.setTimeout)(function(){throw ex},0)},force_saveable_type="application/octet-stream",fs_min_size=0,arbitrary_revoke_timeout=500,revoke=function(file){var revoker=function(){if(typeof file==="string"){get_URL().revokeObjectURL(file)}else{file.remove()}};if(view.chrome){revoker()}else{setTimeout(revoker,arbitrary_revoke_timeout)}},dispatch=function(filesaver,event_types,event){event_types=[].concat(event_types);var i=event_types.length;while(i--){var listener=filesaver["on"+event_types[i]];if(typeof listener==="function"){try{listener.call(filesaver,event||filesaver)}catch(ex){throw_outside(ex)}}}},FileSaver=function(blob,name){var filesaver=this,type=blob.type,blob_changed=false,object_url,target_view,dispatch_all=function(){dispatch(filesaver,"writestart progress write writeend".split(" "))},fs_error=function(){if(blob_changed||!object_url){object_url=get_URL().createObjectURL(blob)}if(target_view){target_view.location.href=object_url}else{var new_tab=view.open(object_url,"_blank");if(new_tab==undefined&&typeof safari!=="undefined"){view.location.href=object_url}}filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url)},abortable=function(func){return function(){if(filesaver.readyState!==filesaver.DONE){return func.apply(this,arguments)}}},create_if_not_found={create:true,exclusive:false},slice;filesaver.readyState=filesaver.INIT;if(!name){name="download"}if(can_use_save_link){object_url=get_URL().createObjectURL(blob);save_link.href=object_url;save_link.download=name;click(save_link);filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url);return}if(view.chrome&&type&&type!==force_saveable_type){slice=blob.slice||blob.webkitSlice;blob=slice.call(blob,0,blob.size,force_saveable_type);blob_changed=true}if(webkit_req_fs&&name!=="download"){name+=".download"}if(type===force_saveable_type||webkit_req_fs){target_view=view}if(!req_fs){fs_error();return}fs_min_size+=blob.size;req_fs(view.TEMPORARY,fs_min_size,abortable(function(fs){fs.root.getDirectory("saved",create_if_not_found,abortable(function(dir){var save=function(){dir.getFile(name,create_if_not_found,abortable(function(file){file.createWriter(abortable(function(writer){writer.onwriteend=function(event){target_view.location.href=file.toURL();filesaver.readyState=filesaver.DONE;dispatch(filesaver,"writeend",event);revoke(file)};writer.onerror=function(){var error=writer.error;if(error.code!==error.ABORT_ERR){fs_error()}};"writestart progress write abort".split(" ").forEach(function(event){writer["on"+event]=filesaver["on"+event]});writer.write(blob);filesaver.abort=function(){writer.abort();filesaver.readyState=filesaver.DONE};filesaver.readyState=filesaver.WRITING}),fs_error)}),fs_error)};dir.getFile(name,{create:false},abortable(function(file){file.remove();save()}),abortable(function(ex){if(ex.code===ex.NOT_FOUND_ERR){save()}else{fs_error()}}))}),fs_error)}),fs_error)},FS_proto=FileSaver.prototype,saveAs=function(blob,name){return new FileSaver(blob,name)};FS_proto.abort=function(){var filesaver=this;filesaver.readyState=filesaver.DONE;dispatch(filesaver,"abort")};FS_proto.readyState=FS_proto.INIT=0;FS_proto.WRITING=1;FS_proto.DONE=2;FS_proto.error=FS_proto.onwritestart=FS_proto.onprogress=FS_proto.onwrite=FS_proto.onabort=FS_proto.onerror=FS_proto.onwriteend=null;return saveAs}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!=null){define([],function(){return saveAs})}

+ 65
- 11
Marlin/configurator/js/configurator.js 파일 보기

@@ -140,8 +140,8 @@ var configuratorApp = (function(){
140 140
       $msgbox = $('#message'),
141 141
       $form = $('#config_form'),
142 142
       $tooltip = $('#tooltip'),
143
-      $config = $('#config_text pre'),
144
-      $config_adv = $('#config_adv_text pre'),
143
+      $cfg = $('#config_text'), $adv = $('#config_adv_text'),
144
+      $config = $cfg.find('pre'), $config_adv = $adv.find('pre'),
145 145
       define_list = [[],[]],
146 146
       define_section = {},
147 147
       boards_list = {},
@@ -186,11 +186,8 @@ var configuratorApp = (function(){
186 186
           : $pre.slideUp(200, didAnim);
187 187
       });
188 188
 
189
-      // Fix the config boxes on the screen (in wide style)
190
-      $(window).bind('scroll resize', function(){
191
-        var $cfg = $('#config_text'), wtop = $(window).scrollTop(), ctop = $cfg.offset().top;
192
-        $cfg.css({ paddingTop: ctop < $form.offset().top+100 && wtop > ctop ? wtop-ctop : 0 });
193
-      });
189
+      // Adjust the form layout for the window size
190
+      $(window).bind('scroll resize', this.adjustFormLayout).trigger('resize');
194 191
 
195 192
       // Read boards.h, Configuration.h, Configuration_adv.h
196 193
       var ajax_count = 0, success_count = 0;
@@ -287,6 +284,28 @@ var configuratorApp = (function(){
287 284
     },
288 285
 
289 286
     /**
287
+     * Make the download-all link visible and active
288
+     */
289
+    activateDownloadAllLink: function() {
290
+      $('.download-all')
291
+        .unbind('mouseover click')
292
+        .mouseover(function() {
293
+          var d = new Date(), fn = d.fileStamp('MarlinConfig.zip');
294
+          $(this).attr({ download:fn, href:'download:'+fn, title:'download:'+fn });
295
+        })
296
+        .click(function(){
297
+          var $button = $(this);
298
+          var zip = new JSZip();
299
+          zip.file(config_file, $config.text());
300
+          zip.file(config_adv_file, $config_adv.text());
301
+          var zipped = zip.generate({type:'blob'});
302
+          saveAs(zipped, $button.attr('download'));
303
+          return false;
304
+        })
305
+        .css({visibility:'visible'});
306
+    },
307
+
308
+    /**
290 309
      * Init the boards array from a boards.h file
291 310
      */
292 311
     initBoardsFromText: function(txt) {
@@ -316,8 +335,8 @@ var configuratorApp = (function(){
316 335
      * Get all the unique define names
317 336
      */
318 337
     updateDefinesFromText: function(index, txt) {
319
-      var section = 'machine',
320
-          leave_out_defines = ['CONFIGURATION_H', 'CONFIGURATION_ADV_H', 'STRING_VERSION', 'STRING_URL', 'STRING_VERSION_CONFIG_H', 'STRING_CONFIG_H_AUTHOR', 'STRING_SPLASH_LINE1', 'STRING_SPLASH_LINE2'],
338
+      var section = 'hidden',
339
+          leave_out_defines = ['CONFIGURATION_H', 'CONFIGURATION_ADV_H'],
321 340
           define_sect = {},
322 341
           r, findDef = new RegExp('(@section|#define)[ \\t]+(\\w+)', 'gm');
323 342
       while((r = findDef.exec(txt)) !== null) {
@@ -426,6 +445,8 @@ var configuratorApp = (function(){
426 445
             // this.initThermistorsFromText(txt);
427 446
             init_index = 0;
428 447
             has_config = true;
448
+            if (has_config_adv)
449
+              this.activateDownloadAllLink();
429 450
           }
430 451
           else {
431 452
             err = boards_file;
@@ -437,6 +458,8 @@ var configuratorApp = (function(){
437 458
             total_config_adv_lines = txt.lineCount();
438 459
             init_index = 1;
439 460
             has_config_adv = true;
461
+            if (has_config)
462
+              this.activateDownloadAllLink();
440 463
           }
441 464
           else {
442 465
             err = config_file;
@@ -448,8 +471,14 @@ var configuratorApp = (function(){
448 471
         var adv = init_index == 1;
449 472
         this.purgeAddedFields(init_index);
450 473
         this.updateDefinesFromText(init_index, txt);
474
+        // TODO: Find sequential names and group them
475
+        //       Allows related settings to occupy one line in the form
476
+          // this.refreshSequentialDefines();
477
+        // TODO: Get dependent groups (#ifdef's) from text
478
+        //       Allows parent to hide/show or disable/enable dependent fields!
479
+          // this.refreshDependentGroups(); // (from all config text)
451 480
         this.createFieldsForDefines(adv);
452
-        this.refreshConfigForm(init_index);
481
+        this.refreshConfigForm(init_index); // TODO: <-- hide dependent fields
453 482
         this.activateDownloadLink(adv);
454 483
       }
455 484
       this.setMessage(err
@@ -1019,7 +1048,11 @@ var configuratorApp = (function(){
1019 1048
               clearInterval(err.pulser);
1020 1049
             }
1021 1050
           }, 50);
1022
-        $err.click(function(e) { $(this).remove(); return false; }).css({cursor:'pointer'});
1051
+        $err.click(function(e) {
1052
+          $(this).remove();
1053
+          self.adjustFormLayout();
1054
+          return false;
1055
+        }).css({cursor:'pointer'});
1023 1056
       }
1024 1057
       else {
1025 1058
         $msgbox.find('p.error, p.warning').each(function() {
@@ -1028,6 +1061,27 @@ var configuratorApp = (function(){
1028 1061
           $(this).remove();
1029 1062
         });
1030 1063
       }
1064
+      self.adjustFormLayout();
1065
+    },
1066
+
1067
+    adjustFormLayout: function() {
1068
+      var wtop = $(window).scrollTop(),
1069
+          ctop = $cfg.offset().top,
1070
+          thresh = $form.offset().top+100;
1071
+      if (ctop < thresh) {
1072
+        var maxhi = $form.height(); // pad plus heights of config boxes can't be more than this
1073
+        var pad = wtop > ctop ? wtop-ctop : 0; // pad the top box to stay in view
1074
+        var innerpad = Math.ceil($cfg.height() - $cfg.find('pre').height());
1075
+        // height to use for the inner boxes
1076
+        var hi = ($(window).height() - ($cfg.offset().top - pad) + wtop - innerpad)/2;
1077
+        if (hi < 200) hi = 200;
1078
+        $cfg.css({ paddingTop: pad });
1079
+        var $pre = $('pre.config');
1080
+        $pre.css({ height: Math.floor(hi) - $pre.position().top });
1081
+      }
1082
+      else {
1083
+        $cfg.css({ paddingTop: wtop > ctop ? wtop-ctop : 0, height: '' });
1084
+      }
1031 1085
     },
1032 1086
 
1033 1087
     setRequestError: function(stat, path) {

+ 14
- 0
Marlin/configurator/js/jszip.min.js
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


Loading…
취소
저장