You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
68 lines
1.8 KiB
var spawn = require('child_process').spawn; |
|
|
|
var command; |
|
|
|
switch(process.platform) { |
|
case 'darwin': |
|
command = 'open'; |
|
break; |
|
case 'win32': |
|
command = 'explorer.exe'; |
|
break; |
|
case 'linux': |
|
command = 'xdg-open'; |
|
break; |
|
default: |
|
throw new Error('Unsupported platform: ' + process.platform); |
|
} |
|
|
|
/** |
|
* Error handling is deliberately minimal, as this function is to be easy to use for shell scripting |
|
* |
|
* @param url The URL to open |
|
* @param callback A function with a single error argument. Optional. |
|
*/ |
|
|
|
function open(url, callback) { |
|
var child = spawn(command, [url]); |
|
var errorText = ""; |
|
child.stderr.setEncoding('utf8'); |
|
child.stderr.on('data', function (data) { |
|
errorText += data; |
|
}); |
|
child.stderr.on('end', function () { |
|
if (errorText.length > 0) { |
|
var error = new Error(errorText); |
|
if (callback) { |
|
callback(error); |
|
} else { |
|
throw error; |
|
} |
|
} else if (callback) { |
|
callback(error); |
|
} |
|
}); |
|
} |
|
|
|
/** |
|
* @param fields Common fields are: "subject", "body". |
|
* Some email apps let you specify arbitrary headers here. |
|
* @param recipientsSeparator Default is ",". Use ";" for Outlook. |
|
*/ |
|
function mailto(recipients, fields, recipientsSeparator, callback) { |
|
recipientsSeparator = recipientsSeparator || ","; |
|
|
|
var url = "mailto:"+recipients.join(recipientsSeparator); |
|
Object.keys(fields).forEach(function (key, index) { |
|
if (index === 0) { |
|
url += "?"; |
|
} else { |
|
url += "&"; |
|
} |
|
url += key + "=" + encodeURIComponent(fields[key]); |
|
}); |
|
open(url, callback); |
|
} |
|
|
|
exports.open = open; |
|
exports.mailto = mailto; |