gars_v2
Version:
Geo Assistant Research System
154 lines (136 loc) • 4.85 kB
JavaScript
(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