diff --git a/lib/get-branch.php b/lib/get-branch.php
index 436fff4..60cb24b 100644
--- a/lib/get-branch.php
+++ b/lib/get-branch.php
@@ -18,93 +18,98 @@ $t = $text['get-branch'];
ICEcoder v get branch
+
+
getPathname(), $b->getPathname());
-}
-
-// Class to put forward the values for sorting
-class SortingIterator implements IteratorAggregate {
- private $iterator = null;
- public function __construct(Traversable $iterator, $callback) {
- $array = iterator_to_array($iterator);
- usort($array, $callback);
- $this->iterator = new ArrayIterator($array);
+// Need to get dir contents recursively? (Used by GitHub diff mode)
+if ($_SESSION['githubDiff']) {
+ // Function to sort given values alphabetically
+ function alphasort($a, $b) {
+ return strcmp($a->getPathname(), $b->getPathname());
}
- public function getIterator() {
- return $this->iterator;
+
+ // Class to put forward the values for sorting
+ class SortingIterator implements IteratorAggregate {
+ private $iterator = null;
+ public function __construct(Traversable $iterator, $callback) {
+ $array = iterator_to_array($iterator);
+ usort($array, $callback);
+ $this->iterator = new ArrayIterator($array);
+ }
+ public function getIterator() {
+ return $this->iterator;
+ }
}
-}
-// Get a full list of dirs & files and begin sorting using above class & function
-$path = $docRoot.$iceRoot;
-$objectList = new SortingIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST), 'alphasort');
+ // Get a full list of dirs & files and begin sorting using above class & function
+ $path = $docRoot.$iceRoot;
+ $objectList = new SortingIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST), 'alphasort');
-// Iterator to get files
-$iter = new RecursiveIteratorIterator(
- new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
- RecursiveIteratorIterator::SELF_FIRST,
- RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied"
-);
+ // Iterator to get files
+ $iter = new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
+ RecursiveIteratorIterator::SELF_FIRST,
+ RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied"
+ );
-// Check if dir has .gitignore file
-function hasGitignore($dir) {
- return is_file("$dir/.gitignore");
-}
-
-// Get a list of .gitignore files into $gi array
-$gi = array();
-if(hasGitignore($path)) {
- $gi[] = "$path/.gitignore";
-}
-foreach ($iter as $scanpath) {
- if (is_dir($scanpath) && strpos($scanpath,".git") == false) {
- $thisDir = str_replace("\\","/",$scanpath);
- if(hasGitignore($thisDir)) {
- $gi[] = $thisDir."/.gitignore";
+ // Check if dir has .gitignore file
+ function hasGitignore($dir) {
+ return is_file("$dir/.gitignore");
}
- }
-}
-// Get $matches array containing existing files listed in .gitignore
-function parseGitignore($file) { # $file = '/absolute/path/to/.gitignore'
- $dir = dirname($file);
- $matches = array();
- $lines = file($file);
- foreach ($lines as $line) {
- $line = trim($line);
- if ($line === '') continue; # empty line
- if (substr($line, 0, 1) == '#') continue; # a comment
- if (substr($line, 0, 1) == '!') { # negated glob
- $line = substr($line, 1);
- $files = array_diff(glob("$dir/*"), glob("$dir/$line"));
- } else { # normal glob
- $files = glob("$dir/$line");
- }
- $matches = array_merge($matches, $files);
- }
- return $matches;
-}
-
-// Cycle through all .gitignore files running above function to get a list of $excluded files
-// Exclude the .git dir as first item as we don't want to see that
-$excluded = array("/.git");
-foreach ($gi as $scanpath) {
- $excludedTest = (parseGitignore($scanpath));
- if (count($excludedTest) > 0) {
- $excluded = array_merge($excluded, $excludedTest);
+ // Get a list of .gitignore files into $gi array
+ $gi = array();
+ if(hasGitignore($path)) {
+ $gi[] = "$path/.gitignore";
+ }
+ foreach ($iter as $scanpath) {
+ if (is_dir($scanpath) && strpos($scanpath,".git") == false) {
+ $thisDir = str_replace("\\","/",$scanpath);
+ if(hasGitignore($thisDir)) {
+ $gi[] = $thisDir."/.gitignore";
+ }
+ }
}
-}
-$objectListArray = array();
-foreach ($objectList as $objectRef) {
- $fileFolderName = @ltrim(substr(str_replace("\\","/",$objectRef->getPathname()), strlen($path)),"/");
- array_push($objectListArray,$fileFolderName);
+ // Get $matches array containing existing files listed in .gitignore
+ function parseGitignore($file) { # $file = '/absolute/path/to/.gitignore'
+ $dir = dirname($file);
+ $matches = array();
+ $lines = file($file);
+ foreach ($lines as $line) {
+ $line = trim($line);
+ if ($line === '') continue; # empty line
+ if (substr($line, 0, 1) == '#') continue; # a comment
+ if (substr($line, 0, 1) == '!') { # negated glob
+ $line = substr($line, 1);
+ $files = array_diff(glob("$dir/*"), glob("$dir/$line"));
+ } else { # normal glob
+ $files = glob("$dir/$line");
+ }
+ $matches = array_merge($matches, $files);
+ }
+ return $matches;
+ }
+
+ // Cycle through all .gitignore files running above function to get a list of $excluded files
+ // Exclude the .git dir as first item as we don't want to see that
+ $excluded = array("/.git");
+ foreach ($gi as $scanpath) {
+ $excludedTest = (parseGitignore($scanpath));
+ if (count($excludedTest) > 0) {
+ $excluded = array_merge($excluded, $excludedTest);
+ }
+ }
+
+ $objectListArray = array();
+ foreach ($objectList as $objectRef) {
+ $fileFolderName = @ltrim(substr(str_replace("\\","/",$objectRef->getPathname()), strlen($path)),"/");
+ array_push($objectListArray,$fileFolderName);
+ }
}
// If we're just getting a branch, get that and set as the finalArray
@@ -319,61 +324,77 @@ if ($_SESSION['githubDiff']) {
x.parentNode.removeChild(x);
}
folderContent = document.getElementById('branch').innerHTML;
+ folderItems = folderContent.split("\n");
- showFiles = function () {
- // Now animate folders & files into view
- i=0;
- animFolders = setInterval(function() {
- i++;
+ showFiles = function() {
+ // Now display folders & files
+
+ // Animate into view?
+ if (folderItems.length <= 50) {
+ showFileI=0;
+ animFolders = setInterval(function() {
+ showFileI++;
+ showNextFile('progressive');
+ },4);
+ // Display immediately
+ } else {
+ showFileJ = folderItems.length;
+ showContent = folderContent;
+ showNextFile();
+ }
+ }
+
+ showNextFile = function(progressive) {
+ if (progressive) {
showContent = "";
- folderItems = folderContent.split("\n");
- for (j=0; j<=i; j++) {
- showContent += folderItems[j];
- if (j 0) {
- k = 0;
- top.addDeletedFiles = setInterval(function() {
- fSplit = top.deletedPaths[k].lastIndexOf("/");
- thePath = top.deletedPaths[k].substr(0,fSplit);
- theFile = top.deletedPaths[k].substr(fSplit+1);
+ }
+ showContent = showContent.slice(28);
+ if (showFileJ==folderItems.length) {
+ // If we've been animating into view, clear that interval
+ if ("undefined" != typeof animFolders) {clearInterval(animFolders);};
+ showContent = showContent.slice(0,-2);
+ // If we've got some deleted files (as we're in GitHub diff mode), add those into the file manager
+ if ("undefined" != typeof top.deletedPaths && top.deletedPaths.length > 0) {
+ i = 0;
+ top.addDeletedFiles = setInterval(function() {
+ fSplit = top.deletedPaths[i].lastIndexOf("/");
+ thePath = top.deletedPaths[i].substr(0,fSplit);
+ theFile = top.deletedPaths[i].substr(fSplit+1);
- // If it's not excluded
- if ("undefined" != typeof excludedArray && excludedArray.indexOf((thePath == "" ? "" : "/" + thePath)+"/"+theFile) == -1) {
+ // If it's not excluded
+ if ("undefined" != typeof excludedArray && excludedArray.indexOf((thePath == "" ? "" : "/" + thePath)+"/"+theFile) == -1) {
- // If we're adding a deleted dir/file in a sub-dir
- if ("" == "/"+thePath) {
- top.ICEcoder.updateFileManagerList('add','/'+thePath,theFile,false,false,false,'file');
- // If we're adding a deleted dir/file at the root level
+ // If we're adding a deleted dir/file in a sub-dir
+ if ("" == "/"+thePath) {
+ top.ICEcoder.updateFileManagerList('add','/'+thePath,theFile,false,false,false,'file');
+ // If we're adding a deleted dir/file at the root level
+ } else {
+ // Folder
+ if (thePath != "") {
+ top.ICEcoder.updateFileManagerList('add',top.iceRoot,thePath,false,false,false,'folder');
+ // File
} else {
- // Folder
- if (thePath != "") {
- top.ICEcoder.updateFileManagerList('add',top.iceRoot,thePath,false,false,false,'folder');
- // File
- } else {
- top.ICEcoder.updateFileManagerList('add',top.iceRoot+thePath,theFile,false,false,false,'file');
- }
+ top.ICEcoder.updateFileManagerList('add',top.iceRoot+thePath,theFile,false,false,false,'file');
}
-
- }
- k++;
- if ("undefined" == typeof top.deletedPaths[k]) {
- clearInterval(top.addDeletedFiles);
}
- },20);
- }
- setTimeout(function(){top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);},4);
- if (!top.ICEcoder.fmReady) {top.ICEcoder.fmReady=true;};
+ }
+ i++;
+ if ("undefined" == typeof top.deletedPaths[i]) {
+ clearInterval(top.addDeletedFiles);
+ }
+
+ },20);
}
- newUL.innerHTML = showContent;
- locNest.parentNode.insertBefore(newUL,locNest.nextSibling);
- },4);
+ setTimeout(function(){top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);},4);
+ if (!top.ICEcoder.fmReady) {top.ICEcoder.fmReady=true;};
+ }
+ newUL.innerHTML = showContent;
+ locNest.parentNode.insertBefore(newUL,locNest.nextSibling);
}
// If we're not in githubDiff mode, show files here