Source

Modified ago
include mixins/head.pug include mixins/menu.pug include mixins/scroller.pug include utils/constants.pug include utils/functions.pug - //- Can't overwrite pug variable const _pug = require('pug'); const ignore = require("ignore"); //- Load highlighter const Prism = require('prismjs'); const loadLanguages = require('prismjs/components/'); const customClass = require('prismjs/plugins/custom-class/prism-custom-class'); loadLanguages(['pug', 'sass', 'coffeescript', 'editorconfig', 'json', 'git', 'markdown']); Prism.plugins.customClass.prefix('code__'); //- Path to file const path = filepath || ''; //- Absolute path to file const absolutePath = `${__dirname}/${path}`; //- if path is directory const isDir = fs.statSync(absolutePath).isDirectory(); +head('Aya - Source') body.body.body_page_source(data-start='#000000', data-end='#000000') +menu('source') //- Menu button .menu__button.menu__button_source .hamburger.menu__hamburger.hamburger_source .columns .columns__column.columns__column_xs_12.columns__column_centered-content h1.title.title_source Source .source //- Current path ("/" if root) h2.source__path.breadcrumbs //- Create breadcrumbs | / a.link.link_source.breadcrumb(href='/source') aya.waifu.ist if path - //- Split path into parts let pathParts = path.split('/') let n = 0; while n < pathParts.length | / //- Create link to directory a.link.link_source.breadcrumb(href=`/source/${pathParts.slice(0,n + 1).join('/')}`)= pathParts[n] - n++ if !isDir .source__info - stats = fs.statSync(absolutePath); .source__modified | Modified | span.timeago(title=stats.mtime ,data-bump=stats.mtime.getTime()) | | ago div span.source__size= binarySize(stats.size) | | a.link.link_source(href=`/${path}`, download=path.split('/').pop()) Save | | a.link.link_source(href=`/${path}`, target='_blank') Open file +scroller('source') //- If path is a directory if isDir - //- Get files and add current path to them let files = fs.readdirSync(absolutePath).map(file => (path ? `${path}/` : path) + file); //- Sort by directories first files.sort((a, b) => { isA = fs.statSync(`${__dirname}/${a}`).isDirectory(); isB = fs.statSync(`${__dirname}/${b}`).isDirectory(); if (isA && !isB) { return -1 } else if (!isA && isB) { return 1 } return 0 }); //- Read .gitignore let gitignore = fs.readFileSync(`${__dirname}/.gitignore`, 'utf-8').split('\n'); //- Add filters let ig = ignore(); for (let i = 0; i < gitignore.length; i++) { ig.add(gitignore[i]); } //- Filter files ig.filter(files); ul.source__files each file in files if !ig.ignores(file) - let dir = `${__dirname}/source/${file}`; fs.mkdirSync(dir, { recursive: true }); fs.writeFileSync(`${dir}/index.html`, _pug.renderFile(`${__dirname}/public/views/source.pug`, { //- Don't add slash if root directory filepath: file, //- Send required variables to new source page require, __dirname })); li - //- Use empty file icon by default let icon = 'empty'; let stats = fs.statSync(`${__dirname}/${file}`); let modified = stats.mtime; //- If is directory if (stats.isDirectory()) { icon = 'folder'; modified = directoryModified(file, ig); } else { //- Get the respective icon for (let name in exts) { if (file.endsWith(name)) { icon = exts[name].icon; } } modified = stats.mtime } a.source__file.icon(class!=`icon_${icon}`, href=`/source/${file}`)= file.split('/').pop() span.source__bump.timeago(title=modified, data-bump=modified.getTime()) else - let lang; //- Get the respective language for (let name in exts) { if (path.endsWith(name)) { lang = exts[name].lang; } } if lang code.code!= Prism.highlight(fs.readFileSync(absolutePath, 'utf-8'), Prism.languages[lang], lang) else if path.endsWith('jpg') || path.endsWith('png') || path.endsWith('svg') || path.endsWith('ico') img.source__image(src=`/${path}`) else .source__no-preview Can't preview this file canvas.matrix#matrix svg.filters(xmlns='http://www.w3.org/2000/svg') defs filter#blur-horizontal fegaussianblur(stdDeviation='3,0') filter#blur-vertical fegaussianblur(stdDeviation='0,6') script(src='/public/scripts/main.min.js')