d2-ui
Version:
75 lines (66 loc) • 1.95 kB
JavaScript
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule getTextContentFromFiles
*
*/
;
var TEXT_CLIPPING_REGEX = /\.textClipping$/;
var TEXT_TYPES = {
'text/plain': true,
'text/html': true,
'text/rtf': true
};
// Somewhat arbitrary upper bound on text size. Let's not lock up the browser.
var TEXT_SIZE_UPPER_BOUND = 5000;
/**
* Extract the text content from a file list.
*/
function getTextContentFromFiles(files, callback) {
var readCount = 0;
var results = [];
files.forEach(function ( /*blob*/file) {
readFile(file, function ( /*string*/text) {
readCount++;
text && results.push(text.slice(0, TEXT_SIZE_UPPER_BOUND));
if (readCount == files.length) {
callback(results.join('\r'));
}
});
});
}
/**
* todo isaac: Do work to turn html/rtf into a content fragment.
*/
function readFile(file, callback) {
if (!global.FileReader || file.type && !(file.type in TEXT_TYPES)) {
callback('');
return;
}
if (file.type === '') {
var contents = '';
// Special-case text clippings, which have an empty type but include
// `.textClipping` in the file name. `readAsText` results in an empty
// string for text clippings, so we force the file name to serve
// as the text value for the file.
if (TEXT_CLIPPING_REGEX.test(file.name)) {
contents = file.name.replace(TEXT_CLIPPING_REGEX, '');
}
callback(contents);
return;
}
var reader = new FileReader();
reader.onload = function () {
callback(reader.result);
};
reader.onerror = function () {
callback('');
};
reader.readAsText(file);
}
module.exports = getTextContentFromFiles;