nav tabs on admin dashboard

This commit is contained in:
2019-03-07 00:20:34 -06:00
parent f73d6ae228
commit e4f473f376
11661 changed files with 216240 additions and 1544253 deletions

View File

@@ -1,160 +1,80 @@
'use strict'
// most of this code was written by Andrew Kelley
// licensed under the BSD license: see
// https://github.com/andrewrk/node-mv/blob/master/package.json
// this needs a cleanup
const u = require('universalify').fromCallback
const fs = require('graceful-fs')
const ncp = require('../copy/ncp')
const path = require('path')
const copy = require('../copy').copy
const remove = require('../remove').remove
const mkdirp = require('../mkdirs').mkdirs
const mkdirp = require('../mkdirs').mkdirp
const pathExists = require('../path-exists').pathExists
function move (source, dest, options, callback) {
if (typeof options === 'function') {
callback = options
options = {}
function move (src, dest, opts, cb) {
if (typeof opts === 'function') {
cb = opts
opts = {}
}
const shouldMkdirp = ('mkdirp' in options) ? options.mkdirp : true
const overwrite = options.overwrite || options.clobber || false
const overwrite = opts.overwrite || opts.clobber || false
if (shouldMkdirp) {
mkdirs()
} else {
doRename()
}
src = path.resolve(src)
dest = path.resolve(dest)
function mkdirs () {
if (src === dest) return fs.access(src, cb)
fs.stat(src, (err, st) => {
if (err) return cb(err)
if (st.isDirectory() && isSrcSubdir(src, dest)) {
return cb(new Error(`Cannot move '${src}' to a subdirectory of itself, '${dest}'.`))
}
mkdirp(path.dirname(dest), err => {
if (err) return callback(err)
doRename()
})
}
function doRename () {
if (path.resolve(source) === path.resolve(dest)) {
fs.access(source, callback)
} else if (overwrite) {
fs.rename(source, dest, err => {
if (!err) return callback()
if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST') {
remove(dest, err => {
if (err) return callback(err)
options.overwrite = false // just overwriteed it, no need to do it again
move(source, dest, options, callback)
})
return
}
// weird Windows shit
if (err.code === 'EPERM') {
setTimeout(() => {
remove(dest, err => {
if (err) return callback(err)
options.overwrite = false
move(source, dest, options, callback)
})
}, 200)
return
}
if (err.code !== 'EXDEV') return callback(err)
moveAcrossDevice(source, dest, overwrite, callback)
})
} else {
fs.link(source, dest, err => {
if (err) {
if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') {
moveAcrossDevice(source, dest, overwrite, callback)
return
}
callback(err)
return
}
fs.unlink(source, callback)
})
}
}
}
function moveAcrossDevice (source, dest, overwrite, callback) {
fs.stat(source, (err, stat) => {
if (err) {
callback(err)
return
}
if (stat.isDirectory()) {
moveDirAcrossDevice(source, dest, overwrite, callback)
} else {
moveFileAcrossDevice(source, dest, overwrite, callback)
}
})
}
function moveFileAcrossDevice (source, dest, overwrite, callback) {
const flags = overwrite ? 'w' : 'wx'
const ins = fs.createReadStream(source)
const outs = fs.createWriteStream(dest, { flags })
ins.on('error', err => {
ins.destroy()
outs.destroy()
outs.removeListener('close', onClose)
// may want to create a directory but `out` line above
// creates an empty file for us: See #108
// don't care about error here
fs.unlink(dest, () => {
// note: `err` here is from the input stream errror
if (err.code === 'EISDIR' || err.code === 'EPERM') {
moveDirAcrossDevice(source, dest, overwrite, callback)
} else {
callback(err)
}
if (err) return cb(err)
return doRename(src, dest, overwrite, cb)
})
})
outs.on('error', err => {
ins.destroy()
outs.destroy()
outs.removeListener('close', onClose)
callback(err)
})
outs.once('close', onClose)
ins.pipe(outs)
function onClose () {
fs.unlink(source, callback)
}
}
function moveDirAcrossDevice (source, dest, overwrite, callback) {
const options = {
overwrite: false
}
function doRename (src, dest, overwrite, cb) {
if (overwrite) {
remove(dest, err => {
if (err) return callback(err)
startNcp()
return remove(dest, err => {
if (err) return cb(err)
return rename(src, dest, overwrite, cb)
})
} else {
startNcp()
}
pathExists(dest, (err, destExists) => {
if (err) return cb(err)
if (destExists) return cb(new Error('dest already exists.'))
return rename(src, dest, overwrite, cb)
})
}
function rename (src, dest, overwrite, cb) {
fs.rename(src, dest, err => {
if (!err) return cb()
if (err.code !== 'EXDEV') return cb(err)
return moveAcrossDevice(src, dest, overwrite, cb)
})
}
function moveAcrossDevice (src, dest, overwrite, cb) {
const opts = {
overwrite,
errorOnExist: true
}
function startNcp () {
ncp(source, dest, options, err => {
if (err) return callback(err)
remove(source, callback)
})
}
copy(src, dest, opts, err => {
if (err) return cb(err)
return remove(src, cb)
})
}
function isSrcSubdir (src, dest) {
const srcArray = src.split(path.sep)
const destArray = dest.split(path.sep)
return srcArray.reduce((acc, current, i) => {
return acc && destArray[i] === current
}, true)
}
module.exports = {