UNPKG

noide

Version:

Web Editor built on hapi and nes websockets using browserify, superviews.js, bootstrap and the ACE editor.

131 lines (111 loc) 3 kB
var patch = require('../patch') var fs = require('../fs') var util = require('../util') var fileEditor = require('../file-editor') var view = require('./view.html') var copied var $ = window.jQuery var path = require('path') function FileMenu (el) { var $el = $(el) $el.on('mouseleave', function () { hide() }) function callback (err, payload) { if (err) { return util.handleError(err) } } function resetPasteBuffer () { copied = null } function setPasteBuffer (file, action) { hide() copied = { file: file, action: action } } function showPaste (file) { if (copied) { var sourcePath = copied.file.relativePath.toLowerCase() var sourceDir = copied.file.relativeDir.toLowerCase() var destinationDir = (file.isDirectory ? file.relativePath : file.relativeDir).toLowerCase() var isDirectory = copied.file.isDirectory if (!isDirectory) { // Always allow pasteing of a file unless it's a move operation (cut) and the destination dir is the same return copied.action !== 'cut' || destinationDir !== sourceDir } else { // Allow pasteing directories if not into self a decendent if (destinationDir.indexOf(sourcePath) !== 0) { // and or if the operation is move (cut) the parent dir too return copied.action !== 'cut' || destinationDir !== sourceDir } } } return false } function rename (file) { hide() resetPasteBuffer() fileEditor.rename(file) } function paste (file) { hide() if (copied && copied.file) { var action = copied.action var source = copied.file resetPasteBuffer() var pastePath = file.isDirectory ? file.path : file.dir if (action === 'copy') { fs.copy(source.path, path.resolve(pastePath, source.name), callback) } else if (action === 'cut') { fs.rename(source.path, path.resolve(pastePath, source.name), callback) } } } function mkfile (file) { hide() resetPasteBuffer() fileEditor.mkfile(file.isDirectory ? file : file.parent) } function mkdir (file) { hide() resetPasteBuffer() fileEditor.mkdir(file.isDirectory ? file : file.parent) } function remove (file) { var path = file.relativePath hide() resetPasteBuffer() if (window.confirm('Delete [' + path + ']')) { fs.remove(path, callback) } } var model = { x: 0, y: 0, file: null, rename: rename, paste: paste, mkfile: mkfile, mkdir: mkdir, remove: remove, showPaste: showPaste, setPasteBuffer: setPasteBuffer } function hide () { model.file = null patch(el, view, model) } function show (x, y, file) { model.x = x model.y = y model.file = file patch(el, view, model) } this.show = show } var fileMenuEl = document.getElementById('file-menu') var fileMenu = new FileMenu(fileMenuEl) module.exports = fileMenu