diff --git a/.webpack/js.js b/.webpack/js.js index 810e2b08..bfb0af36 100644 --- a/.webpack/js.js +++ b/.webpack/js.js @@ -80,7 +80,7 @@ module.exports = { [modules + '/edit-names']: `${dirModules}/edit-names.js`, [modules + '/edit-names-vim']: `${dirModules}/edit-names-vim.js`, [modules + '/menu']: `${dirModules}/menu.js`, - [modules + '/view']: `${dirModules}/view.js`, + [modules + '/view']: `${dirModules}/view/index.js`, [modules + '/help']: `${dirModules}/help.js`, [modules + '/markdown']: `${dirModules}/markdown.js`, [modules + '/config']: `${dirModules}/config/index.js`, diff --git a/HELP.md b/HELP.md index 2aa44473..9597a931 100644 --- a/HELP.md +++ b/HELP.md @@ -156,7 +156,6 @@ Then, start the server again with `cloudcmd` and reload the page. | `F1` | help | `F2` | show `user menu` | `F3` | view, change directory -| `Shift + F3` | view as markdown | `F4` | edit | `Shift + F4` | edit in "vim" mode | `F5` | copy diff --git a/client/key/index.js b/client/key/index.js index be70378a..186df052 100644 --- a/client/key/index.js +++ b/client/key/index.js @@ -24,7 +24,7 @@ const toggleVim = (keyCode) => { if (keyCode === KEY.ESC) { _config('vim', !config('vim')); } -} +}; Chars([]); diff --git a/client/modules/view/get-type.js b/client/modules/view/get-type.js new file mode 100644 index 00000000..80252aa1 --- /dev/null +++ b/client/modules/view/get-type.js @@ -0,0 +1,54 @@ +'use strict'; + +const currify = require('currify'); +const testRegExp = currify((name, reg) => reg.test(name)); +const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); + +const isPDF = (a) => /\.pdf$/i.test(a); +const isHTML = (a) => /\.html$/.test(a); +const isMarkdown = (a) => /.\.md$/.test(a); + +module.exports = (name) => { + if (isPDF(name)) + return 'pdf'; + + if (isImage(name)) + return 'image'; + + if (isMedia(name)) + return 'media'; + + if (isHTML(name)) + return 'html'; + + if (isMarkdown(name)) + return 'markdown'; +}; + +function isImage(name) { + const images = [ + 'jp(e|g|eg)', + 'gif', + 'png', + 'bmp', + 'webp', + 'svg', + 'ico', + ]; + + return images + .map(getRegExp) + .some(testRegExp(name)); +} + +function isMedia(name) { + return isAudio(name) || isVideo(name); +} + +function isAudio(name) { + return /\.(mp3|ogg|m4a)$/i.test(name); +} + +function isVideo(name) { + return /\.(mp4|avi|webm)$/i.test(name); +} diff --git a/client/modules/view.js b/client/modules/view/index.js similarity index 85% rename from client/modules/view.js rename to client/modules/view/index.js index aefb1d65..b42b7ddd 100644 --- a/client/modules/view.js +++ b/client/modules/view/index.js @@ -2,30 +2,34 @@ /* global CloudCmd, DOM */ -require('../../css/view.css'); +require('../../../css/view.css'); const rendy = require('rendy'); const currify = require('currify'); const wraptile = require('wraptile'); const tryToCatch = require('try-to-catch'); +const load = require('load.js'); const modal = require('@cloudcmd/modal'); const createElement = require('@cloudcmd/create-element'); -const {time} = require('../../common/util'); -const {FS} = require('../../common/cloudfunc'); +const {time} = require('../../../common/util'); +const {FS} = require('../../../common/cloudfunc'); +const { + isImage, + isAudio, + getType, +} = require('./types'); -const Files = require('../dom/files'); -const Events = require('../dom/events'); -const load = require('load.js'); -const Images = require('../dom/images'); +const Files = require('../../dom/files'); +const Events = require('../../dom/events'); +const Images = require('../../dom/images'); -const {encode} = require('../../common/entity'); +const {encode} = require('../../../common/entity'); const {assign} = Object; const {isArray} = Array; -const testRegExp = currify((name, reg) => reg.test(name)); const lifo = currify((fn, el, cb, name) => fn(name, el, cb)); const series = wraptile((...a) => { for (const f of a) @@ -36,7 +40,6 @@ const isFn = (a) => typeof a === 'function'; const noop = () => {}; const addEvent = lifo(Events.add); -const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); const loadCSS = load.css; @@ -127,6 +130,9 @@ async function show(data, options) { default: return viewFile(); + case 'markdown': + return await CloudCmd.Markdown.show(Info.path); + case 'html': return viewHtml(path); @@ -271,51 +277,6 @@ function viewImage(prefixURL) { modal.open(titles, config); } -function isImage(name) { - const images = [ - 'jp(e|g|eg)', - 'gif', - 'png', - 'bmp', - 'webp', - 'svg', - 'ico', - ]; - - return images - .map(getRegExp) - .some(testRegExp(name)); -} - -function isMedia(name) { - return isAudio(name) || isVideo(name); -} - -function isAudio(name) { - return /\.(mp3|ogg|m4a)$/i.test(name); -} - -function isVideo(name) { - return /\.(mp4|avi|webm)$/i.test(name); -} - -const isPDF = (name) => /\.pdf$/i.test(name); -const isHTML = (name) => /\.html/.test(name); - -function getType(name) { - if (isPDF(name)) - return 'pdf'; - - if (isImage(name)) - return 'image'; - - if (isMedia(name)) - return 'media'; - - if (isHTML(name)) - return 'html'; -} - async function getMediaElement(src) { check(src); diff --git a/client/modules/view/types.js b/client/modules/view/types.js new file mode 100644 index 00000000..f8797694 --- /dev/null +++ b/client/modules/view/types.js @@ -0,0 +1,56 @@ +'use strict'; + +const currify = require('currify'); +const testRegExp = currify((name, reg) => reg.test(name)); +const getRegExp = (ext) => RegExp(`\\.${ext}$`, 'i'); + +const isPDF = (a) => /\.pdf$/i.test(a); +const isHTML = (a) => /\.html$/.test(a); +const isMarkdown = (a) => /.\.md$/.test(a); + +module.exports.getType = (name) => { + if (isPDF(name)) + return 'pdf'; + + if (isImage(name)) + return 'image'; + + if (isMedia(name)) + return 'media'; + + if (isHTML(name)) + return 'html'; + + if (isMarkdown(name)) + return 'markdown'; +}; + +module.exports.isImage = isImage; +function isImage(name) { + const images = [ + 'jp(e|g|eg)', + 'gif', + 'png', + 'bmp', + 'webp', + 'svg', + 'ico', + ]; + + return images + .map(getRegExp) + .some(testRegExp(name)); +} + +function isMedia(name) { + return isAudio(name) || isVideo(name); +} + +module.exports.isAudiot = isAudio; +function isAudio(name) { + return /\.(mp3|ogg|m4a)$/i.test(name); +} + +function isVideo(name) { + return /\.(mp4|avi|webm)$/i.test(name); +} diff --git a/client/modules/view.spec.js b/client/modules/view/view.spec.js similarity index 100% rename from client/modules/view.spec.js rename to client/modules/view/view.spec.js