1
0
Fork 0

Merge branch 'devel' of https://github.com/triAGENS/ArangoDB into sharding

Conflicts:
	CHANGELOG
This commit is contained in:
Jan Steemann 2014-01-31 11:31:09 +01:00
commit 48e3a5828c
34 changed files with 165 additions and 93 deletions

View File

@ -26,6 +26,10 @@ v1.5.0 (XXXX-XX-XX)
return [ ]; // include everything else
}, false);
* fail if invalid `strategy`, `order` or `itemOrder` attribute values
are passed to the AQL TRAVERSAL function. Omitting these attributes
is not considered an error, but specifying an invalid value for any
of these attributes will make an AQL query fail.
* added SHORTEST_PATH AQL function
@ -57,8 +61,6 @@ v1.5.0 (XXXX-XX-XX)
can also be enforced by setting the `X-Arango-Version` HTTP header in a
client request to this API on a per-request basis.
* issue #748: add vertex filtering to AQL's TRAVERSAL[_TREE]() function
* allow direct access from the `db` object to collections whose names start
with an underscore (e.g. db._users).
@ -170,9 +172,45 @@ v1.5.0 (XXXX-XX-XX)
result of <collection>.getIndexes() for each index. This is
currently only implemented for hash indices and skiplist indices.
v1.4.8 (xxxx-xx-xx)
v1.4.9 (XXXX-XX-XX)
-------------------
* issue #755: TRAVERSAL does not use strategy, order and itemOrder options
these options were not honored when configuring a traversal via the AQL
TRAVERSAL function. Now, these options are used if specified.
* allow vertex and edge filtering with user-defined functions in TRAVERSAL,
TRAVERSAL_TREE and SHORTEST_PATH AQL functions:
// using user-defined AQL functions for edge and vertex filtering
RETURN TRAVERSAL(friends, friendrelations, "friends/john", "outbound", {
followEdges: "myfunctions::checkedge",
filterVertices: "myfunctions::checkvertex"
})
// using the following custom filter functions
var aqlfunctions = require("org/arangodb/aql/functions");
aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) {
return (edge.type !== 'dislikes'); // don't follow these edges
}, false);
aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) {
if (vertex.isDeleted || ! vertex.isActive) {
return [ "prune", "exclude" ]; // exclude these and don't follow them
}
return [ ]; // include everything else
}, false);
* issue #748: add vertex filtering to AQL's TRAVERSAL[_TREE]() function
v1.4.8 (2014-01-31)
-------------------
* install foxx apps in the web interface
* fixed a segfault in the import API

View File

@ -6,16 +6,15 @@
.addButton {
position: relative;
margin-right: 7px;
font-size: 20px;
font-size: 22px;
color: #8AA050;
margin-top: 2px;
cursor: pointer;
}
.deleteButton {
/*color: #B30000;*/
color: #DA4F49;
font-size: 20px;
font-size: 22px;
padding-right: 3px;
top: 3px;
position: relative;
@ -317,17 +316,21 @@ button.btn-server {
a.headerButton {
float: left;
cursor: pointer;
margin-top: 0px;
margin-left: 5px;
margin-right: 5px;
min-height: 19px;
border-radius: 2px;
border-radius: 3px;
position: relative;
box-shadow: none;
background: #8AA051 !important;
/*
background: #8f8d8c !important;
*/
color:#FFFFFF !important;
height:20px;
width:14px;
width:13px;
padding: 5px 11px 2px 9px;
}

View File

@ -44,7 +44,7 @@
#databaseTable td span {
float: right;
color: #B30000;
font-size: 18px;
font-size: 22px;
}
#databaseTable td {

View File

@ -100,7 +100,7 @@
}
.addAttribute, .deleteAttribute {
font-size: 27px;
font-size: 22px;
float:right;
padding-top: 2px;
}

View File

@ -120,7 +120,7 @@
.snippet-no-num {
font-size: 1em;
font-weight: 300;
font-weight: 400;
font-family: 'Open Sans', sans-serif;
margin-bottom:0px;
}
@ -184,7 +184,10 @@
}
.pagination ul > li > a:hover, .pagination ul > .active > a, .pagination ul > .active > span {
/*
background-color: #8aa050;
*/
background-color: #8f8d8c;
color:#FFFFFF;
}

View File

@ -1,8 +1,7 @@
/* Sets the default values shared for content views*/
#content
{
#content {
background-color: rgba(0, 0, 0, 0.15);
margin-top: 30px;
margin-top: 25px;
margin-bottom: 33px;
min-height: 80px;
height: 100%;
@ -10,6 +9,13 @@
margin-left: 20px;
margin-left: 0;
}
div.content {
padding-top: 13px;
padding-left: 5px;
padding-right: 5px;
padding-bottom: 5px;
}
/* layout.css
#aboutDiv {
padding-bottom: 5px;

View File

@ -1,11 +1,3 @@
svg.graphViewer {
background-color: white;
border-width: 1px;
border-style: solid;
border-color: rgba(0,0,0,0.125);
margin-left: 74px;
}
.gv_manageButtonContainer {
margin-top: 10px;
}

View File

@ -1,3 +1,18 @@
svg.graphViewer {
position: absolute;
left: 74px;
background-color: white;
border-width: 1px;
border-style: solid;
border-color: rgba(0,0,0,0.125);
z-index: 0;
}
div.gv_background {
position: relative;
height: 685px;
}
img.searchSubmit {
height: 16px;
margin-left: -18px;
@ -22,9 +37,9 @@ img.searchSubmit {
}
.toolbox {
margin-left: 5px;
position: absolute;
left: 5px;
margin-right: 5px;
margin-bottom: -340px;
border-radius: 0px !important;
-webkit-border-radius: 0px !important;
-moz-border-radius: 0px !important;
@ -79,12 +94,14 @@ div.mousepointer {
}
div.gv_zoom_widget {
position: relative;
position: absolute;
z-index: 1;
left: 95px;
top: 20px;
width: 40px;
height: 300px;
margin-bottom: -322px;
}
div.gv_zoom_slider {
margin: 0px 17px;
width: 4px;
@ -180,14 +197,14 @@ span.gv_caret {
}
div.gv_colour_list {
position: relative;
position: absolute;
right: 26px;
top: 20px;
text-align: right;
height: 680px;
max-height: 680px;
overflow: auto;
margin-bottom: -100%;
float: right;
z-index: 1;
}
div.gv_colour_list li {

View File

@ -192,10 +192,10 @@ input,select,option {
}
li a [class^="icon_arangodb"], li a [class*=" icon_arangodb"] {
font-size: 26px;
font-size: 22px;
position: absolute;
right: 4px;
top: 0px;
right: 5px;
top: 2px;
}
.modal-body .icon_arangodb_info {

View File

@ -52,7 +52,6 @@
// cannot use strict here as we are going to delete globals
var exports = require("internal");
var fs = require("fs");
// -----------------------------------------------------------------------------
// --SECTION-- Module "internal"

View File

@ -2,13 +2,15 @@
/*global window, Backbone, $, window, _*/
(function() {
'use strict';
window.ArangoDatabase = Backbone.Collection.extend({
model: window.Database,
comparator: "name",
sync: function(method, model, options) {
'use strict';
if (method === "read") {
options.url = model.url() + "user";
}
@ -20,6 +22,9 @@
},
parse: function(response) {
if (!response) {
return;
}
return _.map(response.result, function(v) {
return {name:v};
});

View File

@ -29,8 +29,9 @@
////////////////////////////////////////////////////////////////////////////////
function ArangoAdapter(nodes, edges, viewer, config) {
"use strict";
if (nodes === undefined) {
throw "The nodes have to be given.";
}
@ -153,7 +154,6 @@ function ArangoAdapter(nodes, edges, viewer, config) {
throw "[" + data.errorNum + "] " + data.errorMessage;
}
catch (e) {
console.log(e);
throw "Undefined ERROR";
}
}

View File

@ -133,6 +133,7 @@ function EventDispatcher(nodeShaper, edgeShaper, config) {
bindSVGEvents = function() {
svgObj = svgObj || $("svg");
svgObj.unbind();
_.each(svgBase, function(fs, ev) {
svgObj.bind(ev, function(trigger) {
_.each(fs, function(f) {

View File

@ -1,6 +1,5 @@
/*jslint indent: 2, nomen: true, maxlen: 100, sloppy: true, vars: true, white: true, plusplus: true */
/*global _*/
/* global eventLibrary */
////////////////////////////////////////////////////////////////////////////////
/// @brief Graph functionality
@ -119,7 +118,7 @@ function EventLibrary() {
this.InsertNode = function (config) {
self.checkNodeEditorConfig(config);
var adapter = config.adapter,
nodeShaper = config.shaper;
nodeShaper = config.shaper;
return function(data, callback, x, y) {
var cb, d;

View File

@ -53,7 +53,9 @@ function ContextMenu(id) {
},
bindMenu = function($objects) {
menu = $.contextMenu.create(jqId, {shadow: false});
menu = $.contextMenu.create(jqId, {
shadow: false
});
$objects.each(function() {
$(this).bind('contextmenu', function(e){
menu.show(this,e);
@ -64,13 +66,14 @@ function ContextMenu(id) {
divFactory = function() {
div = document.getElementById(id);
if (!div) {
div = document.createElement("div");
div.id = id;
ul = document.createElement("ul");
document.body.appendChild(div);
div.appendChild(ul);
if (div) {
div.parentElement.removeChild(div);
}
div = document.createElement("div");
div.id = id;
ul = document.createElement("ul");
document.body.appendChild(div);
div.appendChild(ul);
ul = div.firstChild;
return div;
};

View File

@ -433,7 +433,7 @@ function GraphViewerUI(container, adapterConfig, optWidth, optHeight, viewerConf
};
container.appendChild(menubar);
container.appendChild(background);
background.className = "thumbnails";
background.className = "thumbnails gv_background ";
background.id = "background";
viewerConfig = viewerConfig || {};

View File

@ -271,7 +271,7 @@ exports.printTable = function (list, columns, options) {
}
var pad = '...';
var descriptions, matrix, col, what, j, value;
var descriptions, matrix, col, what, j;
if (columns === undefined) {
what = list[0];

View File

@ -30,9 +30,7 @@ module.define("org/arangodb/graph", function(exports, module) {
////////////////////////////////////////////////////////////////////////////////
var arangodb = require("org/arangodb"),
arangosh = require("org/arangodb/arangosh"),
is = require("org/arangodb/is"),
ArangoQueryCursor = require("org/arangodb/arango-query-cursor").ArangoQueryCursor,
common = require("org/arangodb/graph-common"),
Edge = common.Edge,
Graph = common.Graph,

View File

@ -633,14 +633,14 @@ function checkReverse (config) {
result = true;
}
}
else if (config.order === ArangoTraverser.PRE_ORDER) {
else if (config.order === ArangoTraverser.PRE_ORDER) {
// pre order
if (config.itemOrder === ArangoTraverser.BACKWARD &&
config.strategy === ArangoTraverser.BREADTH_FIRST) {
config.strategy === ArangoTraverser.BREADTH_FIRST) {
result = true;
}
else if (config.itemOrder === ArangoTraverser.FORWARD &&
config.strategy === ArangoTraverser.DEPTH_FIRST) {
config.strategy === ArangoTraverser.DEPTH_FIRST) {
result = true;
}
}
@ -1202,7 +1202,7 @@ ArangoTraverser = function (config) {
}
if (typeof value === 'string') {
value = value.toLowerCase().replace(/-/, "");
if (map[value] !== null) {
if (map[value] !== null && map[value] !== undefined) {
return map[value];
}
}

View File

@ -354,10 +354,12 @@
this.foxxList.fetch({
async: false
});
var installAppView = new window.foxxMountView({
model: this.foxxList.findWhere({_key: appkey})
});
installAppView.render();
if (!this.installAppView) {
this.installAppView = new window.foxxMountView({
collection: this.foxxList
});
}
this.installAppView.render(appkey);
},
appDocumentation: function(key) {

View File

@ -8,6 +8,6 @@
<strong>Version:</strong>&nbsp;<%=attributes.version %><br />
<!--Git: <a href=<%=attributes.git %>>Repository</a>-->
</p>
<button id="install" class="btn btn-success pull-right">Install</button>
<button class="btn btn-success pull-right install">Install</button>
</div>
</small>

View File

@ -34,6 +34,6 @@
</div>
<div id="colFooter" class="modal-footer">
<button id="cancel" class="btn btn-danger pull-left">Cancel</button>
<button id="install" class="btn btn-success pull-right">Install</button>
<button class="btn btn-success pull-right installFoxx">Install</button>
</div>
</div>

View File

@ -24,7 +24,7 @@ gs = _.sortBy(gs, sortF);
</div>
</ul>
<ul class="thumbnails">
<div class="content">
<form action="javascript:void(0);" autocomplete="on" class="form-horizontal" id="creationDialog">
<fieldset>
<div class="control-group">
@ -172,5 +172,5 @@ gs = _.sortBy(gs, sortF);
</div>
</fieldset>
</form>
</ul>
</div>
</div>

View File

@ -9,7 +9,7 @@
template: templateEngine.createTemplate("foxxInstalledView.ejs"),
events: {
'click #install': 'installFoxx'
'click .install': 'installFoxx'
},
initialize: function(){

View File

@ -2,28 +2,28 @@
/*global alert, Backbone, EJS, $, window, templateEngine */
window.foxxMountView = Backbone.View.extend({
el: '#modalPlaceholder',
m: {},
initialize: function () {
this.m = this.model.attributes;
},
template: templateEngine.createTemplate("foxxMountView.ejs"),
render: function() {
$(this.el).html(this.template.render(this.model));
events: {
"hidden #install-foxx" : "hidden",
"click #cancel" : "hideModal",
"click .installFoxx" : "install"
},
render: function(key) {
var m = this.collection.findWhere({_key: key});
this.m = m;
$(this.el).html(this.template.render(m));
$('#install-foxx').modal('show');
$('.modalTooltips').tooltip({
placement: "left"
});
return this;
},
events: {
"hidden #install-foxx" : "hidden",
"click #cancel" : "hideModal",
"click #install" : "install"
},
hidden: function () {
window.App.navigate("applications", {trigger: true});
},
@ -35,12 +35,10 @@ window.foxxMountView = Backbone.View.extend({
alert("Sorry, you have to give a valid mount point, e.g.: /myPath");
return false;
}
var self = this;
(new window.FoxxCollection()).create({
this.collection.create({
mount: mountPoint,
name: self.m.name,
version: self.m.version
name: this.m.get("name"),
version: this.m.get("version")
});
this.hideModal();
},
@ -48,4 +46,5 @@ window.foxxMountView = Backbone.View.extend({
hideModal: function () {
$('#install-foxx').modal('hide');
}
});

View File

@ -65,6 +65,9 @@ exports.Foxxes = function () {
};
this.install = function (name, mount, version) {
if (version) {
name = "app:" + name + ":" + version;
}
return foxxmanager.mount(name, mount, { setup: true });
};

View File

@ -32,7 +32,6 @@ exports.Swagger = function () {
"use strict";
var db = require("internal").db,
_routing = db._collection("_routing"),
_aal = db._collection("_aal"),
_ = require("underscore"),
foxx_manager = require("org/arangodb/foxx/manager");

View File

@ -1088,7 +1088,7 @@ exports.config = function () {
exports.configJson = function () {
'use strict';
var res = arango.GET("/_admin/foxx/config"), name;
var res = arango.GET("/_admin/foxx/config");
arangosh.checkRequestResult(res);

View File

@ -29,9 +29,7 @@
////////////////////////////////////////////////////////////////////////////////
var arangodb = require("org/arangodb"),
arangosh = require("org/arangodb/arangosh"),
is = require("org/arangodb/is"),
ArangoQueryCursor = require("org/arangodb/arango-query-cursor").ArangoQueryCursor,
common = require("org/arangodb/graph-common"),
Edge = common.Edge,
Graph = common.Graph,

View File

@ -270,7 +270,7 @@ exports.printTable = function (list, columns, options) {
}
var pad = '...';
var descriptions, matrix, col, what, j, value;
var descriptions, matrix, col, what, j;
if (columns === undefined) {
what = list[0];

View File

@ -30,7 +30,6 @@
var graph = require("org/arangodb/graph");
var Edge = graph.Edge;
var Graph = graph.Graph;
var Vertex = graph.Vertex;

View File

@ -632,14 +632,14 @@ function checkReverse (config) {
result = true;
}
}
else if (config.order === ArangoTraverser.PRE_ORDER) {
else if (config.order === ArangoTraverser.PRE_ORDER) {
// pre order
if (config.itemOrder === ArangoTraverser.BACKWARD &&
config.strategy === ArangoTraverser.BREADTH_FIRST) {
config.strategy === ArangoTraverser.BREADTH_FIRST) {
result = true;
}
else if (config.itemOrder === ArangoTraverser.FORWARD &&
config.strategy === ArangoTraverser.DEPTH_FIRST) {
config.strategy === ArangoTraverser.DEPTH_FIRST) {
result = true;
}
}
@ -1201,7 +1201,7 @@ ArangoTraverser = function (config) {
}
if (typeof value === 'string') {
value = value.toLowerCase().replace(/-/, "");
if (map[value] !== null) {
if (map[value] !== null && map[value] !== undefined) {
return map[value];
}
}

View File

@ -3851,7 +3851,9 @@ function TRAVERSAL_FUNC (func,
maxIterations: params.maxIterations,
uniqueness: params.uniqueness,
expander: direction,
strategy: params.strategy
strategy: params.strategy,
order: params.order,
itemOrder: params.itemOrder
};
if (params.followEdges) {
@ -3923,10 +3925,13 @@ function GRAPH_SHORTEST_PATH (vertexCollection,
direction,
params) {
"use strict";
if (params === undefined) {
params = { };
}
params.strategy = "dijkstra";
params.itemorder = "forward";
params.order = "forward";
params.visitor = TRAVERSAL_VISITOR;
if (typeof params.distance === "string") {
@ -3959,6 +3964,10 @@ function GRAPH_TRAVERSAL (vertexCollection,
direction,
params) {
"use strict";
if (params === undefined) {
params = { };
}
params.visitor = TRAVERSAL_VISITOR;

View File

@ -182,7 +182,6 @@ extend(RequestContext.prototype, {
pathParam: function (paramName, attributes) {
'use strict';
var url = this.route.url,
docs = this.route.docs,
constraint = url.constraint || {};
constraint[paramName] = this.typeToRegex[attributes.type];