提交 21f07501 编写于 作者: R rsercano

Merge branches 'demo' and 'master' of https://github.com/rsercano/mongoclient into demo

engines:
eslint:
enabled: true
channel: "eslint-2"
config:
config: .eslintrc
fixme:
enabled: true
ratings:
paths:
- "**.js"
......
......@@ -26,6 +26,6 @@
## Your Environment
<!--- Include as many relevant details about the environment you experienced the bug in -->
* Mongoclient version used:
* Nosqlclient version used:
* Environment name (e.g. chrome 39, portable, docker):
* Operating System and version (e.g. windows 10, ubuntu 16, osx 10.12):
......@@ -15,3 +15,4 @@ notices-for-facebook-graph-api-2
1.4.0-remove-old-dev-bundle-link
1.4.1-add-shell-server-package
1.4.3-split-account-service-packages
1.5-add-dynamic-import-package
......@@ -4,16 +4,16 @@
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
meteor-base@1.0.4 # Packages every Meteor app needs to have
meteor-base@1.1.0 # Packages every Meteor app needs to have
mobile-experience@1.0.4 # Packages for a great mobile UX
mongo@1.1.17 # The database Meteor supports right now
mongo@1.1.19 # The database Meteor supports right now
blaze-html-templates # Compile .html files into Meteor Blaze views
session@1.1.7 # Client-side reactive dictionary for your app
jquery@1.11.10 # Helpful client-side library
tracker@1.1.3 # Meteor's client-side reactive programming library
es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers.
ecmascript@0.7.3 # Enable ECMAScript2015+ syntax in app code
ecmascript@0.8.1 # Enable ECMAScript2015+ syntax in app code
fortawesome:fontawesome
zimme:active-route
......@@ -25,12 +25,13 @@ arch:ace-editor
http@1.2.12
jabbslad:basic-auth
standard-minifier-css@1.3.4
standard-minifier-js@2.0.0
standard-minifier-js@2.1.1
meteorhacks:async
shell-server@0.2.3
shell-server@0.2.4
harrison:papa-parse
kadira:flow-router
kadira:blaze-layout
arillo:flow-router-helpers
reactive-var@1.0.11
universe:mailchimp-v3-api
dynamic-import@0.1.1
METEOR@1.4.4.2
METEOR@1.5.1
allow-deny@1.0.5
allow-deny@1.0.6
arch:ace-editor@1.2.1
arillo:flow-router-helpers@0.5.2
autoupdate@1.3.12
babel-compiler@6.18.2
babel-compiler@6.19.4
babel-runtime@1.0.1
base64@1.0.10
binary-heap@1.0.10
blaze@2.3.2
blaze-html-templates@1.1.2
blaze-tools@1.0.10
boilerplate-generator@1.0.11
boilerplate-generator@1.1.1
caching-compiler@1.1.9
caching-html-compiler@1.1.2
callback-hook@1.0.10
check@1.2.5
coffeescript@1.11.1_4
ddp@1.2.5
ddp-client@1.3.4
ddp-common@1.2.8
ddp-server@1.3.14
ddp@1.3.0
ddp-client@2.0.0
ddp-common@1.2.9
ddp-server@2.0.0
deps@1.0.12
diff-sequence@1.0.7
ecmascript@0.7.3
ecmascript-runtime@0.3.15
dynamic-import@0.1.1
ecmascript@0.8.2
ecmascript-runtime@0.4.1
ecmascript-runtime-client@0.4.3
ecmascript-runtime-server@0.4.1
ejson@1.0.13
es5-shim@4.6.15
fastclick@1.0.13
......@@ -42,36 +45,36 @@ launch-screen@1.1.1
less@2.7.9
livedata@1.0.18
logging@1.1.17
meteor@1.6.1
meteor-base@1.0.4
meteor@1.7.1
meteor-base@1.1.0
meteorhacks:async@1.0.0
minifier-css@1.2.16
minifier-js@2.0.0
minimongo@1.0.23
minifier-js@2.1.1
minimongo@1.2.1
mobile-experience@1.0.4
mobile-status-bar@1.0.14
modules@0.8.2
modules-runtime@0.7.10
modules@0.9.2
modules-runtime@0.8.0
momentjs:moment@2.18.1
mongo@1.1.17
mongo@1.1.22
mongo-id@1.0.6
npm-mongo@2.2.24
npm-mongo@2.2.30
observe-sequence@1.0.16
okgrow:router-autoscroll@0.1.8
ordered-dict@1.0.9
promise@0.8.8
promise@0.8.9
random@1.0.10
reactive-dict@1.1.8
reactive-dict@1.1.9
reactive-var@1.0.11
reload@1.1.11
retry@1.0.9
routepolicy@1.0.12
session@1.1.7
shell-server@0.2.3
shell-server@0.2.4
spacebars@1.0.15
spacebars-compiler@1.1.2
standard-minifier-css@1.3.4
standard-minifier-js@2.0.0
standard-minifier-js@2.1.1
templating@1.3.2
templating-compiler@1.3.2
templating-runtime@1.3.2
......@@ -82,6 +85,6 @@ ui@1.0.13
underscore@1.0.10
universe:mailchimp-v3-api@1.0.2
url@1.1.0
webapp@1.3.15
webapp@1.3.17
webapp-hashing@1.0.9
zimme:active-route@2.3.2
FROM debian:jessie
MAINTAINER R.Sercan Özdemir <info@mongoclient.com>
RUN groupadd -r node && useradd -m -g node node
......
......@@ -11,7 +11,7 @@
## 2.0.0, 9 April 2017
- Enterprise edition is finally here
- More on docs - https://mongoclient.com/docs/
- More on docs - https://nosqlclient.com/docs/
## 1.5.0, 28 December 2016
- Added mongodb 3.4 support
......
## Mongoclient, MongoDB Management Tool
Cross-platform, easy to use, MongoDB 3.4+ support and more features!
## Nosqlclient (Formerly Mongoclient), MongoDB Management Tool
[![Build Status](https://travis-ci.org/mongoclient/mongoclient.svg?branch=master)](https://travis-ci.org/mongoclient/mongoclient)
[![Code Climate](https://codeclimate.com/github/mongoclient/mongoclient/badges/gpa.svg)](https://codeclimate.com/github/mongoclient/mongoclient)
Cross-platform, easy to use, MongoDB 3.4+ support and more features!
[![Build Status](https://travis-ci.org/nosqlclient/nosqlclient.svg?branch=master)](https://travis-ci.org/nosqlclient/nosqlclient)
[![Code Climate](https://codeclimate.com/github/nosqlclient/nosqlclient/badges/gpa.svg)](https://codeclimate.com/github/nosqlclient/nosqlclient)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/6a75fc4e1d3f480f811b5339202400b5)](https://www.codacy.com/app/ozdemirsercan27/mongoclient?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=mongoclient/mongoclient&amp;utm_campaign=Badge_Grade)
[![GitHub release](https://img.shields.io/github/release/mongoclient/mongoclient.svg)](https://github.com/mongoclient/mongoclient)
[![Github All Releases](https://img.shields.io/github/downloads/mongoclient/mongoclient/total.svg)](https://github.com/mongoclient/mongoclient)
[![GitHub release](https://img.shields.io/github/release/nosqlclient/nosqlclient.svg)](https://github.com/nosqlclient/nosqlclient)
[![Github All Releases](https://img.shields.io/github/downloads/nosqlclient/nosqlclient/total.svg)](https://github.com/nosqlclient/nosqlclient)
[![Docker Pulls](https://img.shields.io/docker/pulls/mongoclient/mongoclient.svg)](https://hub.docker.com/r/mongoclient/mongoclient/)
[![AGPLv3 License](https://img.shields.io/github/license/mongoclient/mongoclient.svg)](https://github.com/mongoclient/mongoclient/blob/master/LICENSE)
[![AGPLv3 License](https://img.shields.io/github/license/nosqlclient/nosqlclient.svg)](https://github.com/nosqlclient/nosqlclient/blob/master/LICENSE)
![Nosqlclient](https://www.nosqlclient.com/img/logo/mongoclient_logo_black_half_size.png)
![Mongoclient](https://www.mongoclient.com/img/logo/mongoclient_logo_black_half_size.png)
## Name Change
[Read more about name change](https://medium.com/mongoclient/time-to-change-again-8db4dd56b171)
## Demo
[Try Demo Application](https://www.mongoclient.com/demo)
[Try Demo Application](https://www.nosqlclient.com/demo)
## Documentation
All documentation can be found in https://www.mongoclient.com/docs
All documentation can be found in https://www.nosqlclient.com/docs
## Docker
......@@ -29,7 +33,7 @@ Then you can run it as a daemon:
```docker run -d -p 3000:3000 mongoclient/mongoclient```
To set an external mongodb which is required for meteor to work, you can set ```MONGO_URL``` environment variable. Otherwise mongoclient will install mongodb to container and use it.
To set an external mongodb which is required for meteor to work, you can set ```MONGO_URL``` environment variable. Otherwise nosqlclient will install mongodb to container and use it.
To persist your connections and settings simply bind ```/data/db``` directory to your local machine as below.
......@@ -38,15 +42,15 @@ To persist your connections and settings simply bind ```/data/db``` directory to
## Distributions
* [Linux x64](https://github.com/mongoclient/mongoclient/releases/download/2.1.0/linux-portable-x64.zip)
* [Windows x64](https://github.com/mongoclient/mongoclient/releases/download/2.1.0/windows-portable-x64.zip)
* [OSx](https://github.com/mongoclient/mongoclient/releases/download/2.1.0/osx-portable.zip)
* [More](https://mongoclient.com/docs/start.html)
* [Linux x64](https://github.com/nosqlclient/nosqlclient/releases/download/2.1.0/linux-portable-x64.zip)
* [Windows x64](https://github.com/nosqlclient/nosqlclient/releases/download/2.1.0/windows-portable-x64.zip)
* [OSx](https://github.com/nosqlclient/nosqlclient/releases/download/2.1.0/osx-portable.zip)
* [More](https://nosqlclient.com/docs/start.html)
## History
Please check [history](https://github.com/mongoclient/mongoclient/blob/master/HISTORY.MD) file for version information.
Please check [history](https://github.com/nosqlclient/nosqlclient/blob/master/HISTORY.MD) file for version information.
## License
Mongoclient is licensed under [MIT](https://en.wikipedia.org/wiki/MIT_License) for prior version 2.0.0, but for 2.0.0 and higher versions are licensed under [AGPLv3](https://www.gnu.org/licenses/agpl-3.0.html).
Nosqlclient is licensed under [MIT](https://en.wikipedia.org/wiki/MIT_License) for prior version 2.0.0, but for 2.0.0 and higher versions are licensed under [AGPLv3](https://www.gnu.org/licenses/agpl-3.0.html).
......@@ -4,18 +4,16 @@ The roadmap is likely that priorities will change, but the list below gives an i
## Planned Features
- Adding extension framework to make implementing new features easier to mongoclient for newbies. That means there'll be an addon section on mongoclient.
- Adding extension framework to make implementing new features easier to nosqlclient for newbies. That means there'll be an addon section on mongoclient.
- Change blaze template to REACT.
- [x] Move to ES6
- [x] Move to Flow router
- [x] Move to Meteor 1.4+
- [x] Native shell
- [x] Schema Analyze
- Table View
- [x] Simple query wizard
- SQL Queries
- Improving dump/restore section to make it more usable. Currently it's experimental.
- [x] A migration tool for version transitions of mongoclient. (Import connections, dumps, settings from an older version)
- [x] Writing a brief documentation about contributing and using mongoclient and more.
- [x] Improving dump/restore section to make it more usable. Currently it's experimental.
- [x] A migration tool for version transitions of nosqlclient. (Import connections, dumps, settings from an older version)
- [x] Writing a brief documentation about contributing and using nosqlclient and more.
Apart from these, all open issues, include upcoming enhancements or bug-fixes to be implemented
{
"name": "Mongoclient",
"name": "Nosqlclient (Formerly Mongoclient)",
"description": "MongoDB Management Tool",
"repository": "https://github.com/mongoclient/mongoclient",
"logo": "https://mongoclient.com/img/logo/mongoclient_logo-1.png",
"repository": "https://github.com/nosqlclient/nosqlclient",
"logo": "https://nosqlclient.com/img/logo/mongoclient_logo-1.png",
"keywords": [
"meteor",
"mongodb",
......@@ -10,7 +10,7 @@
"developerTool",
"managementTool"
],
"website": "https://www.mongoclient.com",
"website": "https://www.nosqlclient.com",
"env": {
"BUILDPACK_URL": "https://github.com/rsercano/meteor-buildpack-horse",
"ROOT_URL": {
......
<head>
<meta charset="utf-8">
<title>Mongoclient | MongoDB Client</title>
<title>Nosqlclient | MongoDB Client</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="/logo/head_7.png" rel="shortcut icon" type="image/x-icon">
......
......@@ -6,8 +6,7 @@ import {Template} from "meteor/templating";
import {Session} from "meteor/session";
import {Meteor} from "meteor/meteor";
import {$} from "meteor/jquery";
import {Connections} from "/lib/imports/collections/connections";
import {Settings} from "/lib/imports/collections/settings";
import {Connections, Settings} from "/lib/imports/collections";
import {setAdminResult} from "/client/imports/views/pages/admin_queries/admin_queries";
import {setQueryResult} from "/client/imports/views/pages/browse_collection/browse_collection";
import {getSelectorValue} from "/client/imports/views/query_templates_options/selector/selector";
......@@ -76,6 +75,8 @@ const convertToExtendedJson = function (str) {
};
let Helper = function () {
this.strSessionPromptedUsername = "promptedUsername";
this.strSessionPromptedPassword = "promptedPassword";
this.strSessionConnection = "connection";
this.strSessionCollectionNames = "collectionNames";
this.strSessionSelectedCollection = "selectedCollection";
......@@ -85,7 +86,6 @@ let Helper = function () {
this.strSessionDBStats = "dbStats";
this.strSessionUsedTabIDs = "usedTabIDs";
this.strSessionUsedTabIDsAggregate = "usedTabIDsAggregate";
this.strSessionSelectedDump = "selectedDump";
this.strSessionSelectedFile = "selectedFile";
this.strSessionSelectedStoredFunction = "selectedStoredFunction";
this.strSessionDistinctFields = "distinctFields";
......@@ -100,6 +100,10 @@ let Helper = function () {
this.strSessionUsermanagementRole = "userManagementRole";
this.strSessionUsermanagementPrivilege = "userManagementPrivilege";
this.strSessionSelectedAddCollectionOptions = "selectedAddCollectionOptions";
this.strSessionMongodumpArgs = "selectedMongodumpArgs";
this.strSessionMongorestoreArgs = "selectedMongorestoreArgs";
this.strSessionMongoexportArgs = "selectedMongoexportArgs";
this.strSessionMongoimportArgs = "selectedMongoimportArgs";
};
Helper.prototype = {
......@@ -254,27 +258,27 @@ Helper.prototype = {
},
checkCodeMirrorSelectorForOption (option, result, optionEnum) {
if ($.inArray(option, Session.get(this.strSessionSelectedOptions)) != -1) {
if ($.inArray(option, Session.get(this.strSessionSelectedOptions)) !== -1) {
checkOption(getSelectorValue(), result, optionEnum, option);
}
},
checkAndAddOption (option, divSelector, result, optionEnum) {
if ($.inArray(option, Session.get(this.strSessionSelectedOptions)) != -1) {
if ($.inArray(option, Session.get(this.strSessionSelectedOptions)) !== -1) {
checkOption(this.getCodeMirrorValue(divSelector), result, optionEnum, option);
}
},
setOptionsComboboxChangeEvent (cmb) {
setOptionsComboboxChangeEvent (cmb, sessionVar) {
cmb.on('change', (evt, params) => {
const array = Session.get(this.strSessionSelectedOptions);
const array = Session.get(sessionVar || this.strSessionSelectedOptions);
if (params.deselected) {
array.remove(params.deselected);
}
else {
array.push(params.selected);
}
Session.set(this.strSessionSelectedOptions, array);
Session.set(sessionVar || this.strSessionSelectedOptions, array);
});
},
......@@ -284,7 +288,7 @@ Helper.prototype = {
levels = 1;
}
while (view) {
if (view.name.indexOf("Template.") != -1 && !(levels--)) {
if (view.name.indexOf("Template.") !== -1 && !(levels--)) {
return view.name.substring(view.name.indexOf('.') + 1);
}
view = view.parentView;
......@@ -301,37 +305,52 @@ Helper.prototype = {
},
getDistinctKeysForAutoComplete (selectedCollection) {
let settings = Settings.findOne();
if (!settings || !settings.autoCompleteFields) {
return;
}
if (selectedCollection.endsWith('.chunks')) {
const settings = Settings.findOne();
let countToTake = isNaN(parseInt(settings.autoCompleteSamplesCount)) ? 50 : parseInt(settings.autoCompleteSamplesCount);
if (selectedCollection.endsWith('.chunks') || countToTake <= 0) {
Session.set(this.strSessionDistinctFields, []);
// ignore chunks
return;
}
const mapFunc = "function () {for (var key in this) {emit(key, null);}};";
const reduceFunc = "function (key, stuff) {return null;};";
const options = {
out: {inline: 1}
};
Meteor.call("mapReduce", selectedCollection, mapFunc, reduceFunc, options, Meteor.default_connection._lastSessionId, (err, result) => {
Meteor.call("count", selectedCollection, {}, {}, Meteor.default_connection._lastSessionId, (err, result) => {
if (err || result.error) {
this.showMeteorFuncError(err, result, "Couldn't fetch distinct fields for autocomplete");
this.showMeteorFuncError(err, result, "Couldn't fetch distinct fields");
Ladda.stopAll();
}
else {
const nameArray = [];
result.result.forEach(function (entry) {
nameArray.push(entry._id);
const count = result.result;
Meteor.call("find", selectedCollection, {}, {
limit: countToTake,
skip: Math.random() * count
}, false, Meteor.default_connection._lastSessionId, (err, samples) => {
if (err || samples.error) {
this.showMeteorFuncError(err, samples, "Couldn't fetch distinct fields");
}
else {
const keys = this.findKeysOfObject(samples.result);
Session.set(this.strSessionDistinctFields, keys);
}
Ladda.stopAll();
});
Session.set(this.strSessionDistinctFields, nameArray);
Ladda.stopAll();
}
});
},
findKeysOfObject (resultArray){
let result = [];
for (let object of resultArray) {
const keys = Object.keys(object);
for (let key of keys) {
if (result.indexOf(key) === -1) result.push(key);
}
}
return result;
},
doCodeMirrorResizable(codeMirror){
$('.CodeMirror').resizable({
resize: function () {
......@@ -340,8 +359,16 @@ Helper.prototype = {
});
},
initializeCodeMirror (divSelector, txtAreaId, keepValue, height = 100) {
initializeCodeMirror (divSelector, txtAreaId, keepValue, height = 100, noResize) {
const autoCompleteShortcut = Settings.findOne().autoCompleteShortcut || "Ctrl-Space";
let codeMirror;
let extraKeys = {
"Ctrl-Q": function (cm) {
cm.foldCode(cm.getCursor());
}
};
extraKeys[autoCompleteShortcut] = "autocomplete";
if (!divSelector.data('editor')) {
codeMirror = CodeMirror.fromTextArea(document.getElementById(txtAreaId), {
mode: "javascript",
......@@ -349,12 +376,7 @@ Helper.prototype = {
styleActiveLine: true,
lineNumbers: true,
lineWrapping: false,
extraKeys: {
"Ctrl-Q": function (cm) {
cm.foldCode(cm.getCursor());
},
"Ctrl-Space": "autocomplete"
},
extraKeys: extraKeys,
foldGutter: true,
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"]
});
......@@ -388,7 +410,7 @@ Helper.prototype = {
divSelector.data('editor', codeMirror);
this.doCodeMirrorResizable(codeMirror);
if (!noResize) this.doCodeMirrorResizable(codeMirror);
}
else {
codeMirror = divSelector.data('editor');
......@@ -444,8 +466,14 @@ export default helper;
return null;
};
Template.registerHelper('isOptionSelected', function (option) {
return $.inArray(option, Session.get(helper.strSessionSelectedOptions)) != -1;
Template.registerHelper('getConfiguredAutoCompletionKey', function () {
return Settings.findOne().autoCompleteShortcut || "Ctrl-Space";
});
Template.registerHelper('isOptionSelected', function (option, sessionVar) {
if (!sessionVar || Object.prototype.toString.call(sessionVar) !== '[object String]') return $.inArray(option, Session.get(helper.strSessionSelectedOptions)) !== -1;
return $.inArray(option, Session.get(sessionVar)) !== -1;
});
Template.registerHelper('getConnection', function () {
......
......@@ -2,10 +2,10 @@
<div class="footer">
<div class="pull-right">
<a href="#"> <strong>Mongoclient</strong></a>.com
<a href="#"> <strong>Nosqlclient</strong></a>.com
</div>
<div>
<strong>Copyright</strong><a href="#"> Mongoclient, Licensed with AGPL v3.0</a> &copy; 2017
<strong>Copyright</strong><a href="#"> Nosqlclient, Licensed with AGPL v3.0</a> &copy; 2017
</div>
</div>
......
......@@ -2,7 +2,7 @@ import {Template} from "meteor/templating";
import "/client/imports/views/layouts/navigation/navigation";
import "/client/imports/views/layouts/top_navbar/top_navbar";
import "/client/imports/views/layouts/footer/footer.html";
import {Settings} from "/lib/imports/collections/settings";
import {Settings} from "/lib/imports/collections";
import Enums from "/lib/imports/enums";
import "./main.html";
......@@ -34,7 +34,7 @@ const fixHeight = function () {
};
const doUIStuff = function () {
let body = $("body");
const body = $("body");
// Minimalize menu when screen is less than 768px
$(window).bind("resize load", function () {
......@@ -71,6 +71,14 @@ const doUIStuff = function () {
nav.on('resize', function () {
pageWrapper.css('margin', '0 0 0 ' + nav.width() + 'px');
});
// Hack to enable multiple modals by making sure the .modal-open class
// is set to the <body> when there is at least one modal open left
body.on('hidden.bs.modal', function () {
if ($('.modal.in').length > 0) {
body.addClass('modal-open');
}
});
};
Template.mainLayout.rendered = function () {
......
......@@ -2,7 +2,7 @@ import {Template} from "meteor/templating";
import {Session} from "meteor/session";
import {Meteor} from "meteor/meteor";
import Enums from "/lib/imports/enums";
import {Connections} from "/lib/imports/collections/connections";
import {Connections} from "/lib/imports/collections";
import Helper from "/client/imports/helper";
import "./add_collection.html";
import {getOptions} from "./options/add_collection_options";
......
......@@ -64,10 +64,10 @@
</li>
<li class="{{isActivePath regex='databaseDumpRestore'}}">
<a id="anchorDatabaseDumpRestore" class="aNavigations"><i
<a id="anchorDatabaseDumpRestore" href="{{pathFor route='databaseDumpRestore'}}"
class="aNavigations"><i
class="fa fa-download"></i> <span
class="nav-label">Dump/Restore/Import</span>
<span class="pull-right label label-primary">BETA</span>
</a>
</li>
......@@ -182,7 +182,7 @@
<li>
<a href="#"><i class="fa fa-star"></i> <span
class="nav-label">Mongoclient Skin</span>
class="nav-label">Nosqlclient Skin</span>
<span class="fa arrow pull-right"></span>
</a>
......
......@@ -4,7 +4,7 @@ import {ReactiveVar} from "meteor/reactive-var";
import {Template} from "meteor/templating";
import {Session} from "meteor/session";
import {FlowRouter} from "meteor/kadira:flow-router";
import {Connections} from "/lib/imports/collections/connections";
import {Connections} from "/lib/imports/collections";
import Helper from "/client/imports/helper";
import Enums from "/lib/imports/enums";
import {connect} from "/client/imports/views/layouts/top_navbar/connections/connections";
......@@ -101,8 +101,8 @@ export const renderCollectionNames = function () {
const showMongoBinaryInfo = function () {
if (!localStorage.getItem(Enums.LOCAL_STORAGE_KEYS.MONGO_BINARY_INFO)) {
swal({
title: "Mongo Binary",
text: "Mongo executable to be used on shell and schema analyzer is configurable, you can change it from <b>Settings</b>",
title: "Mongo Tools",
text: "Nosqlclient uses mongo binaries and tools for dump/restore, schema analyzer, and shell you can set the directory of binaries from <b>Settings</b>",
type: "info",
html: true,
confirmButtonColor: "#18A689",
......@@ -143,16 +143,8 @@ Template.navigation.events({
showMongoBinaryInfo();
},
'click #anchorDatabaseDumpRestore'(e) {