UNPKG

gars_v2

Version:

Geo Assistant Research System

154 lines (136 loc) 4.85 kB
(function () {'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var electron = require('electron'); var jetpack = _interopDefault(require('fs-jetpack')); var path = _interopDefault(require('path')); var fs = _interopDefault(require('fs')); // Simple wrapper exposing environment variables to rest of the code. var env = jetpack.cwd(__dirname).read('env.json', 'json'); class Nav { constructor($root){ this.$view = $('<ol>').addClass('breadcrumb').appendTo($root); } cd(filepath) { this.$view.empty(); filepath.split(path.sep) .map((slug, i, slugs) => ({ slug: slug, path: slugs.slice(0, i + 1).join(path.sep), active: i === slugs.length - 1 ? 'active' : '' })) .map(s => { var $li = $('<li>').addClass(s.active); var $a = $('<a href="#">').text(s.slug) .click(e => { console.log('finder nav onnavigate', s.path); e.preventDefault(); this.onnavigate(s.path); }); return $li.append($a); }) .forEach($li => this.$view.append($li)); } onnavigate() {} } const ext2icon = { '.jpg': 'image', '.svg': 'image', '.png': 'image', '.bmp': 'image', '.gars': 'data' }; function getNodes(srcpath) { return fs.readdirSync(srcpath).map(name => { var filepath = path.join(srcpath, name); var stat = fs.statSync(filepath); var type; if (stat.isDirectory()) { type = 'folder'; } else { var ext = path.extname(name); type = ext2icon[ext] || 'unkown'; } return { name, path: filepath, type }; }); } class View { constructor($container) { this.$view = $('<div>').addClass('folder-view').appendTo($container); } renderItem(file) { return $('<div>') .addClass('item').addClass(file.type) .text(file.name) .click(e => { e.preventDefault(); if (file.type === 'folder') { console.log('finder view onnavigate', file.path); this.onnavigate(file.path); } else { console.log('finder view onopen', file.path); this.onopen(file); } }); } cd(filepath, $container) { var nodes = getNodes(filepath); $container = this.$view.empty(); nodes .map(file => this.renderItem(file)) .forEach($item => this.$view.append($item)); } onnavigate() {} onopen() {} } const dialog = electron.remote.dialog; var state$1 = electron.remote.getGlobal('state'); class Finder { constructor($container) { var $view = $('<div>').addClass('view').appendTo($container); var nav = new Nav($view); var content = new View($view); nav.onnavigate = content.onnavigate = this.navigate.bind(this); content.onopen = filepath => this.onopen(filepath); this.nav = nav; this.content = content; this.$view = $view; } navigate(filepath) { console.log('navigating to', filepath); try { this.nav.cd(filepath); this.content.cd(filepath); state$1.set('path', filepath); } catch (e) { dialog.showErrorBox('Navigation Error', e.message); } } onopen() {} } // Here is the starting point for your application code. // All stuff below is just to show you how it works. You can delete all of it. // Use new ES6 modules syntax for everything. var finder = new Finder($('body')); console.log('Loaded environment variables:', env); var state = electron.remote.getGlobal('state'); finder.navigate(state.get('path')); finder.onopen = function({ name, path: path$$1, type }) { if (type === 'image') { var previewWindow = new electron.remote.BrowserWindow({ parent: electron.remote.getCurrentWindow(), fullscreen: true }); previewWindow.loadURL(url.format({ pathname: path$$1.join(__dirname, 'preview.html'), protocol: 'file:', slashes: true })); previewWindow.webContents.send('open', path$$1); if (env.name === 'development') { previewWindow.openDevTools(); } } }; electron.ipcRenderer.on('navigate', (e, file) => finder.navigate(file)); }()); //# sourceMappingURL=app.js.map