Skip to content

Commit 72849e0

Browse files
durranimlucas
authored andcommitted
INT-1788: Move help into own ampersand app (#465)
1 parent ceb1da8 commit 72849e0

38 files changed

+253
-26
lines changed

src/app/help.html

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title>MongoDB Compass</title>
5+
<meta name="viewport" content="initial-scale=1">
6+
<style>
7+
div#static-sidebar {
8+
position: fixed;
9+
top: 0;
10+
left: 0;
11+
width: 250px;
12+
height: 100%;
13+
background-color: #4c5259; /* @slate1 */
14+
}
15+
</style>
16+
</head>
17+
<body>
18+
<div id="application">
19+
<div data-hook="layout-container">
20+
<div id="static-sidebar" class="sidebar"></div>
21+
</div>
22+
</div>
23+
<script src="help.js" charset="UTF-8" async></script>
24+
</body>
25+
</html>

src/app/help.js

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
/* eslint no-console:0 */
2+
var Environment = require('../environment');
3+
Environment.init();
4+
5+
var path = require('path');
6+
var resourcePath = path.join(__dirname, '..', '..');
7+
8+
var ModuleCache = require('hadron-module-cache');
9+
ModuleCache.register(resourcePath);
10+
ModuleCache.add(resourcePath);
11+
12+
var pkg = require('../../package.json');
13+
var CompileCache = require('hadron-compile-cache');
14+
CompileCache.setHomeDirectory(resourcePath);
15+
CompileCache.digestMappings = pkg._compileCacheMappings || {};
16+
17+
var StyleManager = require('./style-manager');
18+
StyleManager.writeStyles();
19+
20+
/**
21+
* The main entrypoint for the application!
22+
*/
23+
var electron = require('electron');
24+
var shell = electron.shell;
25+
var app = require('ampersand-app');
26+
var APP_VERSION = electron.remote.app.getVersion();
27+
28+
var _ = require('lodash');
29+
var qs = require('qs');
30+
var ViewSwitcher = require('ampersand-view-switcher');
31+
var View = require('ampersand-view');
32+
var localLinks = require('local-links');
33+
var ipc = require('hadron-ipc');
34+
var Router = require('./help/router');
35+
var metrics = require('mongodb-js-metrics')();
36+
37+
var addInspectElementMenu = require('debug-menu').install;
38+
39+
ipc.once('app:launched', function() {
40+
console.log('in app:launched');
41+
if (process.env.NODE_ENV !== 'production') {
42+
require('debug').enable('mon*,had*');
43+
require('debug/browser');
44+
}
45+
});
46+
47+
var debug = require('debug')('mongodb-compass:help');
48+
49+
var Application = View.extend({
50+
template: function() {
51+
return [
52+
'<div id="application">',
53+
' <div data-hook="layout-container"></div>',
54+
'</div>'
55+
].join('\n');
56+
},
57+
props: {
58+
version: {
59+
type: 'string',
60+
default: APP_VERSION
61+
}
62+
},
63+
session: {
64+
/**
65+
* Details of the MongoDB Instance we're currently connected to.
66+
*/
67+
instance: 'state',
68+
/**
69+
* @see http://learn.humanjavascript.com/react-ampersand/creating-a-router-and-pages
70+
*/
71+
router: 'object'
72+
},
73+
events: {
74+
'click a': 'onLinkClick'
75+
},
76+
onClientReady: function() {
77+
this.startRouter();
78+
},
79+
startRouter: function() {
80+
this.router = new Router();
81+
debug('Listening for page changes from the router...');
82+
this.listenTo(this.router, 'page', this.onPageChange);
83+
84+
debug('Starting router...');
85+
this.router.history.start({
86+
pushState: false,
87+
root: '/'
88+
});
89+
},
90+
/**
91+
* When you want to go to a different page in the app or just save
92+
* state via the URL.
93+
* @param {String} fragment - To update the location bar with.
94+
* @param {Object} [options] - `silent` and `params`
95+
*/
96+
navigate: function(fragment, options) {
97+
options = _.defaults(options || {}, {
98+
silent: false,
99+
params: null
100+
});
101+
if (options.params) {
102+
fragment += '?' + qs.stringify(options.params);
103+
}
104+
105+
var hash = fragment.charAt(0) === '/' ? fragment.slice(1) : fragment;
106+
this.router.history.navigate(hash, {
107+
trigger: !options.silent
108+
});
109+
},
110+
/**
111+
* Called a soon as the DOM is ready so we can
112+
* start showing status indicators as
113+
* quickly as possible.
114+
*/
115+
render: function() {
116+
debug('Rendering app container...');
117+
118+
this.el = document.querySelector('#application');
119+
this.renderWithTemplate(this);
120+
this.pageSwitcher = new ViewSwitcher(this.queryByHook('layout-container'), {
121+
show: function() {
122+
document.scrollTop = 0;
123+
}
124+
});
125+
126+
if (process.env.NODE_ENV !== 'production') {
127+
debug('Installing "Inspect Element" context menu');
128+
addInspectElementMenu();
129+
}
130+
},
131+
onPageChange: function(view) {
132+
metrics.track('App', 'viewed', view.screenName);
133+
this.pageSwitcher.set(view);
134+
},
135+
onLinkClick: function(event) {
136+
// ignore help links, they're handled in `onHelpClicked`
137+
if (event.target.className === 'help') {
138+
return;
139+
}
140+
var pathname = localLinks.getLocalPathname(event);
141+
if (pathname) {
142+
event.preventDefault();
143+
this.router.history.navigate(pathname);
144+
return;
145+
} else if (event.currentTarget.getAttribute('href') !== '#') {
146+
event.preventDefault();
147+
event.stopPropagation();
148+
shell.openExternal(event.target.href);
149+
}
150+
}
151+
});
152+
153+
var state = new Application({});
154+
155+
app.extend({
156+
client: null,
157+
navigate: state.navigate.bind(state),
158+
onDomReady: function() {
159+
state.render();
160+
// Not serving a part of the app which uses the client,
161+
// so we can just start everything up now.
162+
state.startRouter();
163+
return;
164+
},
165+
init: function() {
166+
var self = this;
167+
// signal to main process that app is ready
168+
ipc.call('window:renderer-ready');
169+
// as soon as dom is ready, render and set up the rest
170+
self.onDomReady();
171+
}
172+
});
173+
174+
Object.defineProperty(app, 'instance', {
175+
get: function() {
176+
return state.instance;
177+
}
178+
});
179+
180+
Object.defineProperty(app, 'router', {
181+
get: function() {
182+
return state.router;
183+
}
184+
});
185+
186+
Object.defineProperty(app, 'state', {
187+
get: function() {
188+
return state;
189+
}
190+
});
191+
192+
app.init();
193+
194+
window.app = app;
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/help/entries/connect-ssl-certificate-authority.md renamed to src/app/help/entries/connect-ssl-certificate-authority.md

File renamed without changes.
File renamed without changes.
File renamed without changes.

src/help/entries/connect-ssl-private-key-password.md renamed to src/app/help/entries/connect-ssl-private-key-password.md

File renamed without changes.

0 commit comments

Comments
 (0)