diff --git a/.github/workflows/UpdateDirectory.js b/.github/workflows/UpdateDirectory.js new file mode 100644 index 0000000000..6ab4e57964 --- /dev/null +++ b/.github/workflows/UpdateDirectory.js @@ -0,0 +1,108 @@ +// requiring path and fs modules +const path = require('path'); +const fs = require('fs'); + +let URL_BASE = "https://github.com/TheAlgorithms/Javascript/blob/master"; +let g_output = []; + +let filepaths = []; +function good_filepaths(top_dir = ".") { + fs.readdir(top_dir, function(err, list) { + if (err) { + console.log(err); + return; + } + list.forEach(function(file) { + let path = top_dir + "/" + file; + if (!file.startsWith(".")) { + fs.stat(path, function(err, stat) { + if (stat && stat.isDirectory()) { + good_filepaths(path); + } else { + if (file.toLowerCase().endsWith(".js")) { + filepaths.push(path.slice(2)); + } + } + }); + } + }); + }) +} + +function md_prefix(i) { + if (i) { + let res = ' '.repeat(i); + return res + "*"; + } else { + return "\n##" + } +} + +function print_path(old_path, new_path) { + let old_parts = old_path.split(path.sep); + let new_parts = new_path.split(path.sep); + for (let i = 0; i < new_parts.length; ++i) { + let new_part = new_parts[i]; + if (i + 1 > old_parts.len || old_parts[i] != new_part) { + if (new_part) { + g_output.push(`${md_prefix(i)} ${new_part.replace('_', ' ')}`); + } + } + } + return new_path; +} + +function build_directory_md(top_dir = ".") { + old_path = ""; + filepaths.sort(function(a, b) { + if (a.toLowerCase() < b.toLowerCase()) return -1; + if (a.toLowerCase() > b.toLowerCase()) return 1; + return 0; + }); + for (let filepath of filepaths) { + file = filepath.split(path.sep); + if (file.length == 1) { + filepath = ""; + filename = file[0]; + } else { + let total = file.length; + filename = file[total - 1]; + filepath = file.splice(0, total - 1).join(path.sep); + } + if (filepath != old_path) { + old_path = print_path(old_path, filepath); + } + let indent = 0; + for (let i = 0; i < filepath.length; ++i) { + if (filepath[i] == path.sep) { + ++indent; + } + } + if (filepath) { + ++indent; + } + let urls = [URL_BASE, filepath, filename]; + let url = urls.join("/").replace(" ", "%20"); + // remove extension from filename + filename = filename.split(".")[0]; + g_output.push(`${md_prefix(indent)} [${filename}](${url})`); + } + g_output = g_output.join('\n'); + return g_output; +} + +good_filepaths(); +setTimeout(() => { + // once the filepaths have been computed + build_directory_md(); + // console.log(filepaths); +}, 1000); +setTimeout(() => { + // once the g_output has been constructed, write to the file + fs.writeFile('DIRECTORY.md', g_output + '\n', (err) => { + if (err) { + console.log(err); + } + }) + // console.log(g_output); +}, 1000); diff --git a/DIRECTORY.md b/DIRECTORY.md index dd836c996c..c51cfbddc1 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -70,8 +70,8 @@ * [CycleSort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/CycleSort.js) * [FlashSort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/FlashSort.js) * [GnomeSort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/GnomeSort.js) - * [Heapsort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/Heapsort.js) * [HeapSort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/HeapSort.js) + * [Heapsort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/Heapsort.js) * [InsertionSort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/InsertionSort.js) * [MergeSort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/MergeSort.js) * [QuickSort](https://github.com/TheAlgorithms/Javascript/blob/master/Sorts/QuickSort.js)