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')