Skip to content

Instantly share code, notes, and snippets.

@DanisHack
Created April 13, 2016 14:47
Show Gist options
  • Save DanisHack/2f6db9de436f6b1e9c07048933731c36 to your computer and use it in GitHub Desktop.
Save DanisHack/2f6db9de436f6b1e9c07048933731c36 to your computer and use it in GitHub Desktop.
Traverse folder directive in angularJS
'use strict';
angular.module('traverse.folder', [])
.factory('folderTraverse', ['$http', '$log', '$q', '$timeout', function(http, log, q, timeout){
var filesInFolder = [];
var traversalAPI = {};
traversalAPI.getFiles = function(dataTransfer){
var defer = q.defer();
if(dataTransfer && dataTransfer.items){
var items = dataTransfer.items;
var length = items.length;
console.log("=== len ---", length);
//for(var i = 0; i < length; i++){
var entry = items[0];
if(entry.getAsEntry){ //Standard HTML5 API
entry = entry.getAsEntry();
console.log("-- getAsEntry --", entry);
}
else if(entry.webkitGetAsEntry){ //WebKit implementation of HTML5 API.
entry = entry.webkitGetAsEntry();
console.log("-- webkitGetAsEntry --", entry);
}
var promise = traversalAPI.traverseFileTree(entry);
promise.then(function(data){
defer.resolve(data);
}, function(err){
defer.reject(err);
});
//}
}
return defer.promise;
}
traversalAPI.traverseFileTree = function(item, path){
var defer = q.defer();
path = path || "";
if (item.isFile) {
// Get file
console.log("item", item);
item.file(function(file) {
//console.log("File:", path + file.name);
traversalAPI.filesInFolder.push(path+file.name);
defer.resolve('done')
});
}
else if (item.isDirectory) {
// Get folder contents
var dirReader = item.createReader();
dirReader.readEntries(function(entries) {
console.log("--- dir count --", entries.length);
//checkDirItems(entries, 0);
for (var i=0; i < entries.length; i++) {
console.log("--- entries ---", entries[i], item.name);
var promise = traversalAPI.traverseFileTree(entries[i], path + item.name + "/");
promise.then(function(data){
defer.resolve(data)
}, function(err){
defer.reject(err);
});
}
});
}
return defer.promise;
}
return traversalAPI
}]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment