Skip to content

Commit 48d1fc7

Browse files
committed
toolbar refining
1 parent 1d47188 commit 48d1fc7

File tree

5 files changed

+82
-74
lines changed

5 files changed

+82
-74
lines changed

app/git-tool.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var git = require('simple-git');
2-
var exec = require('child_process').exec;
2+
var exec = require('child_process').exec;
3+
var promisify = require('./helpers').promisify;
34
var root;
45

56

@@ -15,9 +16,6 @@ new Promise((done,fail)=>git(root).raw(['describe','--tags'],(e,a)=>e?fail(e):do
1516
.then(root=>(console.log('[gitTag]',root),root))
1617
.catch(mst=>console.log('no tag'))
1718

18-
var gitTags2=()=>
19-
new Promise((done,fail)=>git(root).tags([],(e,a)=>e?fail(e):done(a)))
20-
.then(root=>(console.log('[gitTags]',root.all.toString()),root))
2119
var getTag=msg=>{
2220
var m=msg.match(/\(tag:\s(.*)\)/)
2321
return m&&m[1];
@@ -29,22 +27,13 @@ new Promise((done,fail)=>git(root).log(['--tags','--simplify-by-decoration'],(e,
2927
.then(root=>(verbose&&console.log('[gitTags]',root),root))
3028
.catch(mst=>console.log('no tags'))
3129

32-
var gitShow=(branch,file)=>
33-
new Promise((done,fail)=>git(root).show([branch+':'+file],(e,a)=>e?fail(e):done(a)));
34-
35-
var gitCheckout=(branch)=>
36-
new Promise((done,fail)=>git(root).checkout(branch,(e,a)=>e?fail(e):done(a)));
37-
38-
var gitStatus=()=>
39-
new Promise((done,fail)=>git(root).status((e,a)=>e?fail(e):done(a)));
40-
41-
42-
exports.Checkout=gitCheckout;
43-
exports.Status=gitStatus;
30+
exports.Checkout=promisify('checkout',git(root)); //(branch)
31+
exports.Status=promisify('status',git(root)); //()
32+
exports.Fetch=promisify('fetch',git(root)); //()
4433
exports.Root=gitRoot;
4534
exports.Tag=gitTag;
4635
exports.Tags=gitTags;
47-
exports.Show=gitShow;
36+
exports.Show=(branch,file)=>promisify('show',git(root))([branch+':'+file]);
4837
exports.git=git;
4938
exports.root=a=>{
5039
if (a){

app/helpers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Object.prototype.filter = function( predicate, obj ) {
1414
};
1515

1616

17-
function promisify(func) {
17+
function promisify(func,that) {
1818
return function() {
1919
return new Promise((resolve, reject) => {
2020
const args = Array.prototype.slice.apply(arguments);
@@ -24,7 +24,7 @@ function promisify(func) {
2424
}
2525
resolve(data);
2626
});
27-
func.apply(null, args);
27+
(that&&that[func]||func).apply(that||null, args);
2828
});
2929
};
3030
}

app/server.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@ app.get('/status', function (req, res) {
203203
app.get('/checkout-force', function (req, res) {
204204
git.Checkout('--force').then(a=>res.send(a))
205205
});
206+
app.get('/fetch', function (req, res) {
207+
git.Fetch()
208+
.then(a=>res.end(JSON.stringify(a)))
209+
.catch(e=>res.status(403).send(e))
210+
});
206211
app.get('/hint/:name', function (req, res) {
207212
res.send(hints.hint(req.params.name));
208213
})

static/index.html

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ <h4 class="modal-title" id="resetModalLabel">Changed files</h4>
181181
</div>
182182
<div class="modal-footer">
183183
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
184-
<button type="button" class="btn btn-primary">Reset</button>
184+
<button type="button" class="btn btn-danger">Reset</button>
185185
</div>
186186
</div>
187187
</div>
@@ -217,45 +217,48 @@ <h4 class="modal-title" id="myModalLabel">Log</h4>
217217
<div class="collapse navbar-collapse" id="navbarSupportedContent">
218218
<ul class="navbar-nav mr-auto">
219219
<li class="nav-item mr-sm-2 my-auto p-1">
220-
Release:
221-
<button type="button" class="btn btn-info mct-tags" title="choose current release"> TAGS</button>
222-
<button type="button" class="btn btn-danger mct-reset" title="reset all changes">Reset</button>
223-
</li>
224-
<li class="nav-item" style="width:100px">
225-
<span class="mct-status"></span>
220+
<div class="dropdown d-inline-block">
221+
<button class="btn btn-info dropdown-toggle mct-tags" title="Current release" id="dropdownTagsLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
222+
TAGS
223+
</button>
224+
<div class="dropdown-menu" aria-labelledby="dropdownTagsLink">
225+
<button class="dropdown-item mct-change" title="Change version (git checkout)" >Change</button>
226+
<button class="dropdown-item mct-update" title="Update version list from GitHub (git fetch)">Update</button>
227+
<button class="dropdown-item bg-danger text-white mct-reset" title="Reset all changes (git checkout -f)">Reset</button>
228+
</div>
229+
</div>
226230
</li>
227231
<li class="nav-item mr-sm-2 my-auto p-1">
228-
<div class="onoffswitch mct-changed" title="toggle only changed">
232+
<div class="onoffswitch mct-changed" title="Toggle only changed options">
229233
<label class="onoffswitch-label" >
230234
<input type="checkbox" class="onoffswitch-checkbox">
231235
<span class="onoffswitch-inner" data-content-on="Changed" data-content-off="All"></span>
232236
<span class="onoffswitch-switch"></span>
233237
</label>
234238
</div>
235-
<button type="button" class="btn btn-warning mct-upload" title="upload your old configuration or drag it in browser">Upload</button>
239+
<button type="button" class="btn btn-warning mct-upload" title="Upload your old configuration or drag it in browser">Upload</button>
236240
<input type="file" name="files[]" class="mct-upload" multiple style="display:none;">
237241
</li>
238242
<li class="nav-item mr-sm-2 p-1">
239-
<button type="button" class="btn btn-secondary mct-pio-compile disabled" data-toggle="toggle" title="PlatformIO not installed">compile</button>
240-
<button type="button" class="btn btn-secondary mct-pio-flash disabled" data-toggle="toggle" title="PlatformIO not installed">flash</button>
241-
<div class="dropdown d-inline-block mct-ports">
242-
<a class="btn btn-secondary dropdown-toggle" href="https://example.com" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
243+
<button type="button" class="btn btn-secondary mct-pio-compile disabled" data-toggle="toggle" title="Compile Marlin with PlatformIO">Compile</button>
244+
<button type="button" class="btn btn-secondary mct-pio-flash disabled" data-toggle="toggle" title="Upload firmware with PlatformIO to selected port">Flash</button>
245+
<div class="dropdown d-inline-block mct-ports" title="Select port for PlatformIO">
246+
<a class="btn btn-secondary dropdown-toggle" href="#" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
243247
Auto port
244248
</a>
245249
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
246250
<template class="_ports">
247251
<a class="dropdown-item" href="#"></a>
248252
</template>
249253
</div>
254+
</div>
250255
</li>
251256
<li class="nav-item mr-sm-2 p-1">
252-
<button type="button" class="btn btn-secondary mct-consoles" data-toggle="toggle" title="PlatformIO not installed">consoles</button>
253-
<!-- <button type="button" class="btn btn-secondary mct-console disabled" data-toggle="toggle" title="PlatformIO not installed">console</button>-->
257+
<button type="button" class="btn btn-secondary mct-consoles" data-toggle="toggle" title="Manager of serial consoles">Consoles</button>
254258
</li>
255259
<li class="nav-item mr-sm-2 p-1">
256-
<button type="button" class="btn btn-warning mct-issue" title="create an issue on Marlin github repository" >Issue</button>
260+
<button type="button" class="btn btn-warning mct-issue" title="Create an issue on Marlin GitHub repository" >Issue</button>
257261
</li>
258-
259262
</ul>
260263
<div class="text-right">
261264
<a target="_blank" href="https://github.com/akaJes/marlin-config"><img src="/version" title="current version" height="18"></a><br>
@@ -348,7 +351,7 @@ <h4 class="alert-heading">Oh snap!</h4>
348351
</select>
349352
</div>
350353
<div class="col-sm-1 my-auto">
351-
<button type="button" class="btn btn-warning btn-sm">?</button>
354+
<button type="button" class="btn btn-warning btn-sm" title="Show explanation">?</button>
352355
</div>
353356
</div>
354357
</template>
@@ -371,7 +374,7 @@ <h4 class="alert-heading">Oh snap!</h4>
371374
<div class="col-sm-2 my-auto" data-toggle="tooltip" data-animation="false">
372375
</div>
373376
<div class="col-sm-1 my-auto">
374-
<button type="button" class="btn btn-warning btn-sm">?</button>
377+
<button type="button" class="btn btn-warning btn-sm" title="Show explanation">?</button>
375378
</div>
376379
</div>
377380
</template>

static/main.js

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,24 @@ function addNewSection(tab,id,section,sec){
3030
}
3131

3232
function loadHint(name){
33-
$.ajax('/hint/'+name).then(function(data){
33+
$.ajax('/hint/'+name)
34+
.fail(ajaxAlert)
35+
.then(function(data){
3436
$('.mct-hint').html(data);
3537
})
3638
}
3739
function loadGcode(name){
38-
$.ajax('/gcode/'+name).then(function(data){
40+
$.ajax('/gcode/'+name)
41+
.fail(ajaxAlert)
42+
.then(function(data){
3943
$('.mct-hint').html(data).prop('scrollTop',0);
4044
})
4145
}
4246
function saveProp(cmd){
43-
var state=$('.mct-status')
44-
state.text('saving...').fadeIn().css({color:'black'});
47+
progress(0)(true)('50%');
4548
return $.post(cmd)
46-
.then(function(a){ state.text('saved').fadeOut(1000); return a})
47-
.fail(function(a){ state.text(''+a.responseJSON.code).css({color:'red'})})
49+
.then(function(a){ progress('100%')(false); return a})
50+
.fail(function(e){ progress(1)('ERROR: '+(e.responseText||e.state())); return ajaxAlert(e) });
4851
}
4952
function applyProp(def,row,prop,val){
5053
def.changed=def.changed||{}
@@ -62,27 +65,29 @@ function getVal(ob,name){
6265
return ob.changed[name]
6366
return ob[name]
6467
}
68+
function ajaxAlert(fail){
69+
_add($('template._alert'))
70+
.find('p').text(fail.responseText||(fail.statusText+': '+fail.state()))
71+
return fail;
72+
}
6573
function cmdReload(cmd,modal){
6674
cmd
6775
.then(function(data){
6876
$(window).unbind('beforeunload');
6977
window.location.reload();
7078
})
71-
.fail(function(a){
79+
.fail(function(e){
7280
modal&&modal.modal('hide')
73-
_add($('template._alert'))
74-
.find('p').text(a.responseText)
81+
return ajaxAlert(e);
7582
})
7683
}
7784
function progress(val){
7885
var dom = $('.mct-progress');
7986
val===true&&dom.toggle(val);
80-
val===false&&dom.fadeOut(5000);
81-
if (typeof val =='string'){
82-
dom.find('span').text(val)
83-
$('.mct-progress .progress-bar').width(val);
84-
}
85-
typeof val =='number'&& dom.find('.progress-bar').toggleClass('progress-bar-danger',!!val);
87+
val===false&&dom.stop().fadeOut(3000);
88+
if (typeof val =='string')
89+
dom.find('.progress-bar').width(val).find('span').text(val);
90+
typeof val =='number'&& dom.find('.progress-bar').toggleClass('bg-danger',!!val);
8691
return progress;
8792
}
8893
// The plugin code https://gist.github.com/meleyal/3794126
@@ -105,7 +110,6 @@ $.fn.draghover = function(options) {
105110
});
106111
};
107112
function upload_files(files){
108-
// return new Promise((done,fail)=>{
109113
if ( !files.length )
110114
return ;//fail('no files')
111115
var formData = new FormData();
@@ -135,17 +139,14 @@ function upload_files(files){
135139
// once the upload reaches 100%, set the progress bar text to done
136140
if (percentComplete === 100){
137141
progress(false);
138-
// done();
139142
}
140143
}
141144
}, false);
142145
return xhr;
143146
}
144147
}).fail(function(e){
145-
progress(1)('ERROR '+e.responseText);
146-
// fail(e.responseText)
148+
progress(1)('ERROR: '+(e.responseText||e.state()));
147149
});
148-
// })
149150
}
150151
function stream_cmd(command,proc){
151152
return function(){
@@ -480,7 +481,6 @@ $(function(){
480481
});
481482
(function(){
482483
var m=$('#mct-tags-modal');
483-
var a=$('#mct-alert');
484484
var t=m.find('table tbody');
485485
m.find('button.btn-primary').on('click',function(ev){
486486
var row = t.find('.table-success');
@@ -493,8 +493,10 @@ $(function(){
493493
$(this).find('tr').removeClass('table-success');
494494
$(ev.target).parents('tr').addClass('table-success')
495495
});
496-
$('.mct-tags').on('click',function(){
497-
$.ajax('/tags').then(function(data){
496+
$('.mct-change').on('click',function(){
497+
$.ajax('/tags')
498+
.fail(ajaxAlert)
499+
.then(function(data){
498500
data=data.sort(function(a,b){ return a.date<b.date?1:a.date>b.date?-1:0;})
499501
t.empty();
500502
data.map(function(row){
@@ -503,25 +505,34 @@ $(function(){
503505
m.modal();
504506
})
505507
})
506-
})();
507-
(function(){
508-
var r=$('#mct-reset-modal');
509-
var p=r.find('p');
510-
$('.mct-reset').on('click',function(){
511-
$.ajax('/status').then(function(data){
508+
}());
509+
(function(btn,ui){
510+
var p=ui.find('p');
511+
btn.on('click',function(){
512+
$.ajax('/status')
513+
.fail(ajaxAlert)
514+
.then(function(data){
512515
p.empty();
513516
data.files.map(function(file){
514517
p.append(file.path+'<br>')
515518
})
516-
r.modal();
519+
ui.modal();
517520
})
518521
})
519-
r.find('button.btn-primary').on('click',function(ev){
520-
cmdReload($.ajax('/checkout-force'),r);
522+
ui.find('button.btn-danger').on('click',function(ev){
523+
cmdReload($.ajax('/checkout-force'),ui);
521524
})
522-
})();
525+
}($('.mct-reset'),$('#mct-reset-modal')));
526+
(function(btn){
527+
btn.on('click',function(){
528+
progress(0)(true)('50%');
529+
$.ajax('/fetch')
530+
.fail(ajaxAlert)
531+
.then(function(a){ progress('100%')(false); return a})
532+
})
533+
}($('.mct-update')));
523534
$('.mct-consoles').on('click',function(){ window.open('consoles.html','_blank') });
524-
(function(){
535+
(function(){ //REMOVE
525536
var r=$('#mct-console-modal');
526537
var p=r.find('textarea');
527538
var b=r.find('.modal-body button');
@@ -612,7 +623,7 @@ $(function(){
612623
var cmd;
613624
$('.mct-pio-compile, .mct-pio-flash, .mct-ports a')
614625
.toggleClass('disabled',!config.pio)
615-
.attr(config.pio?'title':'null','')
626+
.attr(!config.pio?'title':'null','PlatformIO not installed')
616627
.eq(0).on('click',function(){
617628
cmd=stream_cmd('/pio',proc)()
618629
}).end()
@@ -676,7 +687,7 @@ $(function(){
676687
}());
677688
var state=$('.mct-changed input')
678689
.on('change',function(){
679-
var defs=$('.tab-pane[id*=card] .form-group')
690+
var defs=$('.tab-pane[id*=card-C] .form-group')
680691
if ($(this).prop('checked'))
681692
defs.not('.bg-info').hide()
682693
else

0 commit comments

Comments
 (0)