Skip to content

Commit b910d9c

Browse files
committed
add a download spinner
1 parent 85e4f98 commit b910d9c

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

bin/vue-init

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ var path = require('path')
99
var rm = require('rimraf').sync
1010
var uid = require('uid')
1111
var chalk = require('chalk')
12+
var prompt = require('prompt-for-patched')
1213
var logger = require('../lib/logger')
1314
var getGitUser = require('../lib/git-user')
14-
var prompt = require('prompt-for-patched')
15+
var Spinner = require('../lib/spinner')
1516

1617
/**
1718
* Usage.
@@ -103,7 +104,10 @@ function run () {
103104
}
104105
// download and generate
105106
var tmp = '/tmp/vue-template-' + uid()
107+
var spinner = new Spinner('downloading template')
108+
spinner.start()
106109
download(template, tmp, { clone: clone }, function (err) {
110+
spinner.stop()
107111
if (err) logger.fatal(err)
108112
generate(tmp, to, function (err) {
109113
if (err) logger.fatal(err)

lib/spinner.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
var sprintf = require('util').format
2+
3+
// Make a console spinner.
4+
// Code based on code from Mocha by Visionmedia/Tj
5+
// https://github.com/visionmedia/mocha/blob/master/bin/_mocha
6+
function Spinner (message) {
7+
var spinnerMessage = message;
8+
9+
this.start = function (opts) {
10+
var opts = opts || {};
11+
var self = this;
12+
var spinner = 'win32' == process.platform ? ['|','/','-','\\'] : ['◜','◠','◝','◞','◡','◟'];
13+
14+
function play(arr, interval) {
15+
var len = arr.length, i = 0;
16+
interval = interval || 100;
17+
18+
var drawTick = function () {
19+
var str = arr[i++ % len];
20+
process.stdout.write('\u001b[0G' + str + '\u001b[90m' + spinnerMessage + '\u001b[0m');
21+
};
22+
23+
self.timer = setInterval(drawTick, interval);
24+
}
25+
26+
var frames = spinner.map(function(c) {
27+
return sprintf(' \u001b[96m%s ', c);
28+
});
29+
30+
play(frames, opts.fps || 30);
31+
};
32+
33+
this.message = function (message) {
34+
spinnerMessage = message;
35+
};
36+
37+
this.stop = function () {
38+
process.stdout.write('\u001b[0G\u001b[2K');
39+
clearInterval(this.timer);
40+
};
41+
}
42+
43+
module.exports = Spinner

0 commit comments

Comments
 (0)