diff --git a/app/angular/service/logicService.js b/app/angular/service/logicService.js
index d28db18e..d038a74e 100644
--- a/app/angular/service/logicService.js
+++ b/app/angular/service/logicService.js
@@ -8,14 +8,10 @@ import shapes from "../../joint/shapes";
joint.shapes.erd = shapes;
import "jointjs/dist/joint.min.css";
-import "../../joint/joint.ui.stencil";
-import "../../joint/joint.ui.stencil.css";
-import "../../joint/joint.ui.selectionView";
-import "../../joint/joint.ui.selectionView.css";
-import "../../joint/joint.ui.halo.css";
-import "../../joint/joint.ui.halo";
-import "../../joint/br-scroller";
-import "../../joint/joint.dia.command";
+import "../editor/editorManager"
+import "../editor/editorScroller"
+import "../editor/editorActions"
+import "../editor/elementActions";
import KeyboardController, { types } from "../components/keyboardController";
import conversorService from "../service/conversorService"
@@ -37,7 +33,7 @@ const logicService = ($rootScope, ModelAPI, LogicFactory, LogicConversorService)
"name": ''
};
- ls.selectedHalo = null;
+ ls.selectedActions = null;
ls.selectedLink = {};
@@ -50,9 +46,8 @@ const logicService = ($rootScope, ModelAPI, LogicFactory, LogicConversorService)
drawGrid: true,
model: ls.graph
});
- ls.commandManager = new joint.dia.CommandManager({ graph: ls.graph });
- ls.selectionView = new joint.ui.SelectionView({ paper: ls.paper, graph: ls.graph, model: new Backbone.Collection });
+ ls.editorActions = new joint.ui.EditorActions({ graph: ls.graph });
ls.keyboardController = new KeyboardController(ls.paper.$document);
@@ -139,22 +134,22 @@ const logicService = ($rootScope, ModelAPI, LogicFactory, LogicConversorService)
}
ls.applyResizePage = function () {
- var $app = $('#content');
- ls.paperScroller = new joint.ui.PaperScroller({
+ const content = $('#content');
+ ls.editorScroller = new joint.ui.EditorScroller({
autoResizePaper: true,
paper: ls.paper,
cursor: 'grab'
});
- $app.append(ls.paperScroller.render().el);
+ content.append(ls.editorScroller.render().el);
}
ls.applyDragAndDrop = function () {
- var stencil = new joint.ui.Stencil({
+ const enditorManager = new joint.ui.EditorManager({
graph: ls.graph,
- paper: ls.paper
+ paper: ls.paper,
});
- $('#stencil-holder').append(stencil.render().el);
- stencil.load([
+ $(".elements-holder").append(enditorManager.render().el);
+ enditorManager.loadElements([
LogicFactory.createTable()
]);
}
@@ -174,9 +169,9 @@ const logicService = ($rootScope, ModelAPI, LogicFactory, LogicConversorService)
ls.clearSelectedElement();
if(!ls.keyboardController.spacePressed){
- ls.selectionView.startSelecting(evt);
+
} else {
- ls.paperScroller.startPanning(evt);
+ ls.editorScroller.startPanning(evt);
}
});
@@ -191,21 +186,15 @@ const logicService = ($rootScope, ModelAPI, LogicFactory, LogicConversorService)
}
ls.applySelectionOptions = function (cellView) {
- var halo = new joint.ui.Halo({
+ const elementActions = new joint.ui.ElementActions({
cellView: cellView,
boxContent: false
});
- halo.on('action:link:add', function (link) {
+ elementActions.on('action:link:add', (link) => {
ls.onLink(link);
});
- halo.on('action:removeElement:pointerdown', function (link) {
- console.log("removing....");
- });
- ls.selectedHalo = halo;
- halo.removeHandle('clone');
- halo.removeHandle('fork');
- halo.removeHandle('rotate');
- halo.render();
+ ls.selectedActions = elementActions;
+ elementActions.render();
}
ls.checkAndEditTableName = function (model) {
@@ -315,15 +304,14 @@ const logicService = ($rootScope, ModelAPI, LogicFactory, LogicConversorService)
}
ls.clearSelectedElement = function () {
- if(ls.selectedHalo != null) {
- ls.selectedHalo.remove();
- ls.selectedHalo = null;
+ if(ls.selectedActions != null) {
+ ls.selectedActions.remove();
+ ls.selectedActions = null;
}
if (ls.selectedElement != null && ls.selectedElement.model != null) {
ls.selectedElement.unhighlight();
}
ls.selectedElement = {};
- ls.selectionView.cancelSelection();
$rootScope.$broadcast('element:select', null);
$rootScope.$broadcast('link:select', null);
$rootScope.$broadcast('columns:select', []);
@@ -411,23 +399,23 @@ const logicService = ($rootScope, ModelAPI, LogicFactory, LogicConversorService)
}
ls.undo = function () {
- ls.commandManager.undo();
+ ls.editorActions.undo();
}
ls.redo = function () {
- ls.commandManager.redo();
+ ls.editorActions.redo();
}
ls.zoomIn = function () {
- ls.paperScroller.zoom(0.2, { max: 2 });
+ ls.editorScroller.zoom(0.2, { max: 2 });
}
ls.zoomOut = function () {
- ls.paperScroller.zoom(-0.2, { min: 0.2 });
+ ls.editorScroller.zoom(-0.2, { min: 0.2 });
}
ls.zoomNone = function () {
- ls.paperScroller.zoom();
+ ls.editorScroller.zoom();
}
ls.registerShortcuts = () => {
diff --git a/app/joint/br-scroller.js b/app/joint/br-scroller.js
deleted file mode 100644
index 78a4c8b3..00000000
--- a/app/joint/br-scroller.js
+++ /dev/null
@@ -1,149 +0,0 @@
-import $ from "jquery";
-import * as joint from "jointjs/dist/joint";
-
-joint.ui.PaperScroller = Backbone.View.extend({
- className: "paper-scroller",
- events: {
- mousedown: "pointerdown",
- mousemove: "pointermove",
- touchmove: "pointermove"
- },
- options: {
- paper: void 0,
- padding: 0,
- autoResizePaper: !1,
- baseWidth: void 0,
- baseHeight: void 0,
- contentOptions: void 0
- },
- initialize: function(a) {
- _.bindAll(this, "startPanning", "stopPanning", "pan"), this.options = _.extend({}, _.result(this, "options"), a || {});
- var b = this.options.paper,
- c = joint.V(b.viewport).scale();
- this._sx = c.sx, this._sy = c.sy, _.isUndefined(this.options.baseWidth) && (this.options.baseWidth = b.options.width), _.isUndefined(this.options.baseHeight) && (this.options.baseHeight = b.options.height), this.$el.append(b.el), this.addPadding(), this.listenTo(b, "scale", this.onScale), this.listenTo(b, "resize", this.onResize), this.options.autoResizePaper && this.listenTo(b.model, "change add remove reset", this.adjustPaper)
- },
- onResize: function() {
- this._center && this.center(this._center.x, this._center.y)
- },
- onScale: function(a, b, c, d) {
- this.adjustScale(a, b), this._sx = a, this._sy = b, (c || d) && this.center(c, d)
- },
- beforePaperManipulation: function() {
- this.$el.css("visibility", "hidden")
- },
- afterPaperManipulation: function() {
- this.$el.css("visibility", "visible")
- },
- toLocalPoint: function(a, b) {
- var c = this.options.paper.viewport.getCTM();
- return a += this.el.scrollLeft - this.padding.paddingLeft - c.e, a /= c.a, b += this.el.scrollTop - this.padding.paddingTop - c.f, b /= c.d, joint.g.point(a, b)
- },
- adjustPaper: function() {
- this._center = this.toLocalPoint(this.el.clientWidth / 2, this.el.clientHeight / 2);
- var a = _.extend({
- gridWidth: this.options.baseWidth,
- gridHeight: this.options.baseHeight,
- allowNewOrigin: "negative"
- }, this.options.contentOptions);
- return this.options.paper.fitToContent(this.transformContentOptions(a)), this
- },
- adjustScale: function(a, b) {
- var c = this.options.paper.options,
- d = a / this._sx,
- e = b / this._sy;
- this.options.paper.setOrigin(c.origin.x * d, c.origin.y * e), this.options.paper.setDimensions(c.width * d, c.height * e)
- },
- transformContentOptions: function(a) {
- var b = this._sx,
- c = this._sy;
- return a.gridWidth && (a.gridWidth *= b), a.gridHeight && (a.gridHeight *= c), a.minWidth && (a.minWidth *= b), a.minHeight && (a.minHeight *= c), _.isObject(a.padding) ? a.padding = {
- left: (a.padding.left || 0) * b,
- right: (a.padding.right || 0) * b,
- top: (a.padding.top || 0) * c,
- bottom: (a.padding.bottom || 0) * c
- } : _.isNumber(a.padding) && (a.padding = a.padding * b), a
- },
- center: function(a, b) {
- var c = this.options.paper.viewport.getCTM(),
- d = -c.e,
- e = -c.f,
- f = d + this.options.paper.options.width,
- g = e + this.options.paper.options.height;
- _.isUndefined(a) || _.isUndefined(b) ? (a = (d + f) / 2, b = (e + g) / 2) : (a *= c.a, b *= c.d);
- var h = this.options.padding,
- i = this.el.clientWidth / 2,
- j = this.el.clientHeight / 2,
- k = i - h - a + d,
- l = i - h + a - f,
- m = j - h - b + e,
- n = j - h + b - g;
- return this.addPadding(Math.max(k, 0), Math.max(l, 0), Math.max(m, 0), Math.max(n, 0)), this.el.scrollLeft = a - i + c.e + this.padding.paddingLeft, this.el.scrollTop = b - j + c.f + this.padding.paddingTop, this
- },
- centerContent: function() {
- var a = joint.V(this.options.paper.viewport).bbox(!0, this.options.paper.svg);
- return this.center(a.x + a.width / 2, a.y + a.height / 2), this
- },
- addPadding: function(a, b, c, d) {
- var e = this.options.padding,
- f = this.padding = {
- paddingLeft: Math.round(e + (a || 0)),
- paddingTop: Math.round(e + (c || 0))
- },
- g = {
- marginBottom: Math.round(e + (d || 0)),
- marginRight: Math.round(e + (b || 0))
- };
- return f.paddingLeft = Math.min(f.paddingLeft, .9 * this.el.clientWidth), f.paddingTop = Math.min(f.paddingTop, .9 * this.el.clientHeight), this.$el.css(f), this.options.paper.$el.css(g), this
- },
- zoom: function(a, b) {
- b = b || {};
- var c, d, e = this.toLocalPoint(this.el.clientWidth / 2, this.el.clientHeight / 2),
- f = a,
- g = a;
- if (b.absolute || (f += this._sx, g += this._sy), b.grid && (f = Math.round(f / b.grid) * b.grid, g = Math.round(g / b.grid) * b.grid), b.max && (f = Math.min(b.max, f), g = Math.min(b.max, g)), b.min && (f = Math.max(b.min, f), g = Math.max(b.min, g)), _.isUndefined(b.ox) || _.isUndefined(b.oy)) c = e.x, d = e.y;
- else {
- var h = f / this._sx,
- i = g / this._sy;
- c = b.ox - (b.ox - e.x) / h, d = b.oy - (b.oy - e.y) / i
- }
- f = f || 1;
- g = g || 1;
- return this.beforePaperManipulation(), this.options.paper.scale(f, g), this.center(c, d), this.afterPaperManipulation(), this
- },
- zoomToFit: function(a) {
- a = a || {};
- var b = this.options.paper,
- c = _.clone(b.options.origin);
- return a.fittingBBox = a.fittingBBox || _.extend({}, joint.g.point(c), {
- width: this.$el.width() + this.padding.paddingLeft,
- height: this.$el.height() + this.padding.paddingTop
- }), this.beforePaperManipulation(), b.scaleContentToFit(a), b.setOrigin(c.x, c.y), this.adjustPaper().centerContent(), this.afterPaperManipulation(), this
- },
- startPanning: function(a) {
- $('.paper-scroller').css('cursor', 'grab');
- a = joint.util.normalizeEvent(a), this._clientX = a.clientX, this._clientY = a.clientY, $(document.body).on({
- "mousemove.panning touchmove.panning": this.pan,
- "mouseup.panning touchend.panning": this.stopPanning
- })
- },
- pan: function (a) {
- $('.paper-scroller').css('cursor', 'grabbing');
- a = joint.util.normalizeEvent(a);
- var b = a.clientX - this._clientX,
- c = a.clientY - this._clientY;
- this.el.scrollTop -= c, this.el.scrollLeft -= b, this._clientX = a.clientX, this._clientY = a.clientY
- },
- stopPanning: function() {
- $('.paper-scroller').css('cursor', 'default ');
- $(document.body).off(".panning")
- },
- pointerdown: function(a) {
- a.target == this.el && this.options.paper.pointerdown.apply(this.options.paper, arguments)
- },
- pointermove: function(a) {
- a.target == this.el && this.options.paper.pointermove.apply(this.options.paper, arguments)
- },
- remove: function() {
- this.stopPanning(), Backbone.View.prototype.remove.apply(this, arguments)
- }
-});
diff --git a/app/joint/joint.dia.command.js b/app/joint/joint.dia.command.js
deleted file mode 100644
index 8148293d..00000000
--- a/app/joint/joint.dia.command.js
+++ /dev/null
@@ -1,172 +0,0 @@
-import * as joint from "jointjs/dist/joint";
-
-joint.dia.CommandManager = Backbone.Model.extend({
- defaults: {
- cmdBeforeAdd: null,
- cmdNameRegex: /^(?:add|remove|change:\w+)$/
- },
- PREFIX_LENGTH: 7,
- initialize: function(a) {
- _.bindAll(this, "initBatchCommand", "storeBatchCommand"), this.graph = a.graph, this.reset(), this.listen()
- },
- listen: function() {
- this.listenTo(this.graph, "all", this.addCommand, this), this.listenTo(this.graph, "batch:start", this.initBatchCommand, this), this.listenTo(this.graph, "batch:stop", this.storeBatchCommand, this)
- },
- createCommand: function(a) {
- var b = {
- action: void 0,
- data: {
- id: void 0,
- type: void 0,
- previous: {},
- next: {}
- },
- batch: a && a.batch
- };
- return b
- },
- push: function(a) {
- this.redoStack = [], a.batch ? (this.lastCmdIndex = Math.max(this.lastCmdIndex, 0), this.trigger("batch", a)) : (this.undoStack.push(a), this.trigger("add", a))
- },
- addCommand: function(a, b, c, d) {
- if (!(d && d.dry || !this.get("cmdNameRegex").test(a) || "function" == typeof this.get("cmdBeforeAdd") && !this.get("cmdBeforeAdd").apply(this, arguments))) {
- var e = void 0;
- if (this.batchCommand) {
- if (e = this.batchCommand[Math.max(this.lastCmdIndex, 0)], this.lastCmdIndex >= 0 && (e.data.id !== b.id || e.action !== a)) {
- var f = _.findIndex(this.batchCommand, function(c, d) {
- return c.data.id === b.id && c.action === a
- }, this);
- 0 > f || "add" === a || "remove" === a ? e = this.createCommand({
- batch: !0
- }) : (e = this.batchCommand[f], this.batchCommand.splice(f, 1)), this.lastCmdIndex = this.batchCommand.push(e) - 1
- }
- } else e = this.createCommand({
- batch: !1
- });
- if ("add" === a || "remove" === a) {
- e.action = a;
- e.data.id = b.id;
- e.data.type = b.attributes.type;
- e.data.attributes = _.merge({}, b.toJSON());
- e.options = d || {};
- e.data.view = b;
- this.push(e);
- return e;
- }
- var g = a.substr(this.PREFIX_LENGTH);
- e.batch && e.action || (e.action = a, e.data.id = b.id, e.data.type = b.attributes.type, e.data.previous[g] = _.clone(b.previous(g)), e.options = d || {}), e.data.next[g] = _.clone(b.get(g)), this.push(e)
- }
- },
- initBatchCommand: function() {
- this.batchCommand ? this.batchLevel++ : (this.batchCommand = [this.createCommand({
- batch: !0
- })], this.lastCmdIndex = -1, this.batchLevel = 0)
- },
- storeBatchCommand: function() {
- if (this.batchCommand && this.batchLevel <= 0) {
- var a = this.filterBatchCommand(this.batchCommand);
- a.length > 0 && (this.redoStack = [], this.undoStack.push(a), this.trigger("add", a)), delete this.batchCommand, delete this.lastCmdIndex, delete this.batchLevel
- } else this.batchCommand && this.batchLevel > 0 && this.batchLevel--
- },
- filterBatchCommand: function(a) {
- for (var b = a.slice(), c = []; b.length > 0;) {
- var d = b.shift(),
- e = d.data.id;
- if (null != d.action && null != e) {
- if ("add" === d.action) {
- var f = _.findIndex(b, {
- action: "remove",
- data: {
- id: e
- }
- });
- if (f >= 0) {
- b = _.reject(b, function(a, b) {
- return f >= b && a.data.id === e
- });
- continue
- }
- } else if ("remove" === d.action) {
- var g = _.findIndex(b, {
- action: "add",
- data: {
- id: e
- }
- });
- if (g >= 0) {
- b.splice(g, 1);
- continue
- }
- } else if (0 === d.action.indexOf("change") && _.isEqual(d.data.previous, d.data.next)) continue;
- c.push(d)
- }
- }
- return c
- },
- revertCommand: function(a) {
- this.stopListening();
- var b, c = {
- commandManager: this.id || this.cid
- };
- b = _.isArray(a) ? a : [a];
- for (var d = b.length - 1; d >= 0; d--) {
- var e = b[d],
- f = this.graph.getCell(e.data.id);
- switch (e.action) {
- case "add":
- f.remove(c);
- break;
- case "remove":
- this.graph.addCell(e.data.view, c);
- break;
- default:
- var g = e.action.substr(this.PREFIX_LENGTH);
- f.set(g, e.data.previous[g], c)
- }
- }
- this.listen()
- },
- applyCommand: function(a) {
- this.stopListening();
- var b, c = {
- commandManager: this.id || this.cid
- };
- b = _.isArray(a) ? a : [a];
- for (var d = 0; d < b.length; d++) {
- var e = b[d],
- f = this.graph.getCell(e.data.id);
- switch (e.action) {
- case "add":
- this.graph.addCell(e.data.view, c);
- break;
- case "remove":
- f.remove(c);
- break;
- default:
- var g = e.action.substr(this.PREFIX_LENGTH);
- f.set(g, e.data.next[g], c)
- }
- }
- this.listen()
- },
- undo: function() {
- var a = this.undoStack.pop();
- a && (this.revertCommand(a), this.redoStack.push(a))
- },
- redo: function() {
- var a = this.redoStack.pop();
- a && (this.applyCommand(a), this.undoStack.push(a))
- },
- cancel: function() {
- this.hasUndo() && (this.revertCommand(this.undoStack.pop()), this.redoStack = [])
- },
- reset: function() {
- this.undoStack = [], this.redoStack = []
- },
- hasUndo: function() {
- return this.undoStack.length > 0
- },
- hasRedo: function() {
- return this.redoStack.length > 0
- }
-});
diff --git a/app/joint/joint.ui.halo.css b/app/joint/joint.ui.halo.css
deleted file mode 100644
index 063b70fa..00000000
--- a/app/joint/joint.ui.halo.css
+++ /dev/null
@@ -1 +0,0 @@
-.halo{position:absolute;pointer-events:none}.halo .handle{position:absolute;pointer-events:auto;width:20px;height:20px;background-size:20px 20px;background-repeat:no-repeat;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;user-drag:none}.halo .handle{cursor:pointer}.halo .handle.hidden{display:none}.halo .resize{cursor:se-resize}.halo .clone{cursor:move}.halo .link{cursor:move;cursor:-moz-grabbing;cursor:-webkit-grabbing}.halo .fork{cursor:move}.halo .rotate{cursor:move}.halo .box{position:absolute;top:100%;text-align:center;font-size:10px;line-height:14px;border-radius:6px;padding:6px}.halo.surrounding .box{left:-20px;right:-20px;margin-top:30px}.halo.surrounding.small .box{margin-top:25px}.halo.surrounding.tiny .box{margin-top:20px}.halo.surrounding.animate .handle{transition:background-size 80ms,width 80ms,height 80ms,top 150ms,left 150ms,bottom 150ms,right 150ms}.halo.surrounding.small .handle{width:15px;height:15px;background-size:15px 15px}.halo.surrounding.tiny .handle{width:10px;height:10px;background-size:10px 10px}.halo.surrounding .handle.se{bottom:-25px;right:-25px}.halo.surrounding.small .handle.se{bottom:-19px;right:-19px}.halo.surrounding.tiny .handle.se{bottom:-13px;right:-13px}.halo.surrounding .handle.nw{top:-21px;left:-25px}.halo.surrounding.small .handle.nw{top:-19px;left:-19px}.halo.surrounding.tiny .handle.nw{top:-13px;left:-13px}.halo.surrounding .handle.n{top:-22px;left:50%;margin-left:-10px}.halo.surrounding.small .handle.n{top:-19px;margin-left:-7.5px}.halo.surrounding.tiny .handle.n{top:-13px;margin-left:-5px}.halo.surrounding .handle.e{right:-25px;top:-webkit-calc(50% - 10px);top:calc(50% - 10px)}.halo.surrounding.small .handle.e{right:-19px;top:-webkit-calc(50% - 8px);top:calc(50% - 8px)}.halo.surrounding.tiny .handle.e{right:-13px;top:-webkit-calc(50% - 5px);top:calc(50% - 5px)}.halo.surrounding .handle.ne{top:-21px;right:-25px}.halo.surrounding.small .handle.ne{top:-19px;right:-19px}.halo.surrounding.tiny .handle.ne{top:-13px;right:-13px}.halo.surrounding .handle.w{left:-25px;top:50%;margin-top:-10px}.halo.surrounding.small .handle.w{left:-19px;margin-top:-8px}.halo.surrounding.tiny .handle.w{left:-13px;margin-top:-5px}.halo.surrounding .handle.sw{bottom:-25px;left:-25px}.halo.surrounding.small .handle.sw{bottom:-19px;left:-19px}.halo.surrounding.tiny .handle.sw{bottom:-13px;left:-13px}.halo.surrounding .handle.s{bottom:-24px;left:50%;margin-left:-10px}.halo.surrounding.small .handle.s{bottom:-19px;margin-left:-7.5px}.halo.surrounding.tiny .handle.s{bottom:-13px;margin-left:-5px}.halo.surrounding .handle.selected{background-color:rgba(0,0,0,.1);border-radius:3px}.halo.pie .box{margin-top:10px;left:0;right:0}@-webkit-keyframes pie-visibility{0%{visibility:hidden}100%{visibility:visible}}@-moz-keyframes pie-visibility{0%{visibility:hidden}100%{visibility:visible}}@-o-keyframes pie-visibility{0%{visibility:hidden}100%{visibility:visible}}@keyframes pie-visibility{0%{visibility:hidden}100%{visibility:visible}}@-webkit-keyframes pie-opening{0%{transform:scale(0.4) rotate(-20deg)}100%{transform:scale(1) rotate(0deg)}}@-moz-keyframes pie-opening{0%{transform:scale(0.4) rotate(-20deg)}100%{transform:scale(1) rotate(0deg)}}@-o-keyframes pie-opening{0%{transform:scale(0.4) rotate(-20deg)}100%{transform:scale(1) rotate(0deg)}}@keyframes pie-opening{0%{transform:scale(0.4) rotate(-20deg)}100%{transform:scale(1) rotate(0deg)}}.halo.pie{margin:-2px 0 0 -2px}.halo.pie .handles{display:none;z-index:1;pointer-events:visiblePainted;height:100px;width:100px;position:absolute;right:-50px;top:-webkit-calc(50% - 50px);top:calc(50% - 50px);margin:-2px -2px 0 0;border-radius:50%;cursor:default}.halo.pie.open .handles{display:block;-webkit-animation:pie-visibility .1s,pie-opening .1s;-moz-animation:pie-visibility .1s,pie-opening .1s;-o-animation:pie-visibility .1s,pie-opening .1s;animation:pie-visibility .1s,pie-opening .1s;-webkit-animation-delay:0s,.1s;-moz-animation-delay:0s,.1s;-o-animation-delay:0s,.1s;animation-delay:0s,.1s;-webkit-animation-timing-function:step-end,ease;-moz-animation-timing-function:step-end,ease;-o-animation-timing-function:step-end,ease;animation-timing-function:step-end,ease}.halo.pie .handle{pointer-events:none;width:100%;height:100%}.halo.pie .slice{pointer-events:visiblePainted;transform:translate(50px,50px)}.halo.pie .slice-svg{width:100%;height:100%}.halo.pie .pie-toggle{z-index:2;pointer-events:visiblePainted;cursor:pointer;display:block;width:30px;height:30px;border-radius:50%;box-sizing:border-box;background-position:center;background-repeat:no-repeat;background-size:20px 20px;position:absolute;right:-15px;top:-webkit-calc(50% - 15px);top:calc(50% - 15px);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;user-drag:none}.halo.pie.open .pie-toggle{-webkit-transition:.1s background-image;-moz-transition:.1s background-image;-ms-transition:.1s background-image;-o-transition:.1s background-image;transition:.1s background-image}.halo.toolbar .handles{display:flex;position:absolute;top:-50px;padding:7px 5px}.halo.toolbar .handles:after{content:'';position:absolute;width:0;height:0;top:100%;margin-top:4px;left:10px;border-left:10px solid transparent;border-right:10px solid transparent}.halo.toolbar .handle{display:inline-block;position:relative;margin:0 2px;background-size:16px 16px;background-position:3px 3px}.halo.toolbar .handle.hidden{display:none}.halo.toolbar .handle:hover:after{content:'';position:absolute;top:100%;width:100%;margin-top:7px}.halo.toolbar .box{margin-top:10px;min-width:100px}.halo.surrounding .box{color:#FFF;background-color:#1ABC9C}.halo.pie .box{background-color:#7C68FC;color:#FFF}.halo.pie{box-shadow:inset 0 0 0 2px #E2CEFF,0 0 0 2px #E2CEFF;border:2px solid #7c68fc;border-radius:5px}.halo.pie .handles{background-color:#fff;border:2px solid #7C68FC;box-shadow:0 0 0 3px #E2CEFF}.halo.pie .slice{stroke:#E2CEFF;stroke-width:1;fill:#fff}.halo.pie .slice:hover{fill:#E2CEFF}.halo.pie .handle.selected .slice{fill:#4DA4EB;stroke:#4DA4EB}.halo.pie .pie-toggle{background-color:#FFF;border:2px solid #7C68FC;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAIAAABKGoy8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALJJREFUeNrs2LERgjAUxvEkOggNg2grizAElUOwiLa6hxawiMTU8JLjLolE7v+VKcjv4F14L9paq0qNUQUHHDhw/4I7xj/icZvG93yxqtW5MdvjnnfhGB9eDkfNgQMHDhw4cGVF+6Yv12uIf/TkOV20r3/xvrllF5QpgY2oOXDg1uDchPKbBDbS8bdMXfsR16/9gZoDBw4cOHDgikqCm003oYjXrhmnLz4rOHDgdoL7CjAAHI4lpm8FALwAAAAASUVORK5CYII=");box-shadow:inset 0 0 0 3px #E2CEFF}.halo.pie.open .pie-toggle{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAA6CAIAAABu2d1/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNrs2LEJgDAQheGcWEQrwS1s3McJ3M3ePdIoWLmAYKWpPDdIIWIU/9emuA+ScPBEVc13kphPBS5cuHDhwoULFy5cuHDhwv0XNw2crYsZnPrtuSLC5lLVUpSXuH13jO7h0kTnSZo2ufIY/B7husND+Wpw4Ubn2iwCKDxUAnX0C9eE0J7DhQsXLly4cOHChQsXLly4cG/KKcAATXsl8TPrOcMAAAAASUVORK5CYII=")}.halo.toolbar .handles{border-radius:5px;background-color:#F7F7F7;border-bottom:4px solid #3B425F;box-shadow:0 1px 2px #202132}.halo.toolbar .handles:after{border-top:7px solid #3B425F}.halo.toolbar .handle:hover:after{border-bottom:4px solid #FC6CB8}.halo.toolbar .box{background-color:#696D89;color:#C7C9E2}
diff --git a/app/joint/joint.ui.halo.js b/app/joint/joint.ui.halo.js
deleted file mode 100644
index 3138ff39..00000000
--- a/app/joint/joint.ui.halo.js
+++ /dev/null
@@ -1,453 +0,0 @@
-import $ from "jquery";
-import _ from "underscore";
-import "backbone";
-import * as joint from "jointjs/dist/joint";
-
-joint.ui.Halo = Backbone.View.extend({
- PIE_INNER_RADIUS: 20,
- PIE_OUTER_RADIUS: 50,
- className: "halo",
- events: {
- "mousedown .handle": "onHandlePointerDown",
- "touchstart .handle": "onHandlePointerDown",
- "mousedown .pie-toggle": "onPieTogglePointerDown",
- "touchstart .pie-toggle": "onPieTogglePointerDown"
- },
- options: {
- tinyThreshold: 40,
- smallThreshold: 80,
- loopLinkPreferredSide: "top",
- loopLinkWidth: 40,
- rotateAngleGrid: 15,
- clearAll: !0,
- useModelGeometry: !1,
- boxContent: function(a, b) {
- var c = _.template("x: <%= x %>, y: <%= y %>, width: <%= width %>, height: <%= height %>, angle: <%= angle %>"),
- d = a.model.getBBox();
- return c({
- x: Math.floor(d.x),
- y: Math.floor(d.y),
- width: d.width,
- height: d.height,
- angle: Math.floor(a.model.get("angle") || 0)
- })
- },
- clone: function(a, b) {
- return a.clone().unset("z")
- },
- handles: [{
- name: "resize",
- position: "se",
- events: {
- pointerdown: "startResizing",
- pointermove: "doResize",
- pointerup: "stopBatch"
- },
- icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2NjREODhDMjc4MkVFMjExODUyOEU5NTNCRjg5OEI3QiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowQTc4MzUwQjJGMEIxMUUyOTFFNUE1RTAwQ0EwMjU5NyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowQTc4MzUwQTJGMEIxMUUyOTFFNUE1RTAwQ0EwMjU5NyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2NjREODhDMjc4MkVFMjExODUyOEU5NTNCRjg5OEI3QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2NjREODhDMjc4MkVFMjExODUyOEU5NTNCRjg5OEI3QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pk3oY88AAAEMSURBVHja7JftDYMgEIbRdABHcARG6CalGziCG3QE3KAj0A0cod3AEa6YUEMpcKeI9oeXvP5QuCeA90EBAGwPK7SU1hkZ12ldiT6F1oUycARDRHLBgiTiEzCwTNhNuRT8XOEog/AyMqlOXPEuZzx7q29aXGtIhLvQwfNuAgtrYgrcB+VWqH2BhceBD45ZE4EyB/7zIQTvCeAWgdpw1CqT2Sri2LsRZ4cddtg/GLfislo55oNZxE2ZLcFXT8haU7YED9yXpxsCGMvTn4Uqe7DIXJnsAqGYB5CjFnNT6yEE3qr7iIJT+60YXJUZQ3G8ALyof+JWfTV6xrluEuqkHw/ESW3CoJsBRVubtwADAI2b6h9uJAFqAAAAAElFTkSuQmCC"
- }, {
- name: "remove",
- position: "nw",
- events: {
- pointerdown: "removeElement"
- },
- icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO5JREFUeNrUV9sNwyAMtLoAI3SEjJIRMgqjdBRG8CiMQGnlVHwEOBAE19L9OdwRGz+IcNsibISLCBk48dlooB0RXCDNgeXbbntWbovCyVlNtkf4AeQnvJwJ//IwCQdy8zAZeynm/gYBPpcT7gbyNDGb4/4CnyOLb1M+MED+MVPxZfEhQASnFQ4hp4qIlJxAEd+KaQGlpiIC8bmCRZOvRNBL/kvGltp+RdRLfqK5wZhCITMdjaury5lB5OFBCuxvQjAtCZc/w+WFaHkpXt6MVLTj5QOJipFs+VCqYixXsZioWM1GLaf7yK45ZT1/CzAAESidXQn9F/MAAAAASUVORK5CYII="
- }, {
- name: "clone",
- position: "n",
- events: {
- pointerdown: "startCloning",
- pointermove: "doClone",
- pointerup: "stopCloning"
- },
- icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2NjREODhDMjc4MkVFMjExODUyOEU5NTNCRjg5OEI3QiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxNTM0NjJBRjJGMkQxMUUyQkRFM0FCRTMxMDhFQkE2QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxNTM0NjJBRTJGMkQxMUUyQkRFM0FCRTMxMDhFQkE2QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2NjREODhDMjc4MkVFMjExODUyOEU5NTNCRjg5OEI3QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2NjREODhDMjc4MkVFMjExODUyOEU5NTNCRjg5OEI3QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkJFWv4AAAD3SURBVHja5FfRDYMgED2bDsAIjsAIMAluoqs4CY7gCI7ABtTTnsEUNCVQanzJGT/Qx7t7HFBZa6EEHlAIxYh90HPYzCHul+pixM93TV1wfDRNA0qppGRSyh2x8A2q6xqEEIc/mqZpCcTZWJ/iaPR9D13XLe/fNqKiNd6lahxHMMb8jlhrvRlgGAbvYJwQTsytMcH9hjEGnPN0NUZS15khx2L2SMi1GwgqQfdSkKPJ1RRnau/ZMq9J3LbtVtfodezrw6H1nAp2NeWK2bm5Tx9lTyAfilNhXuOkTv/n7hTqwbFwN5DDVGcMHVIsM2fVu7lXt7s7vQQYAIMHB7xhVbHdAAAAAElFTkSuQmCC"
- }, {
- name: "link",
- position: "e",
- events: {
- pointerdown: "startLinking",
- pointermove: "doLink",
- pointerup: "stopLinking"
- },
- icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIwRkVFNkM3MkU3RjExRTJBMDA3RkZBQzMyMzExQzIzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIwRkVFNkM4MkU3RjExRTJBMDA3RkZBQzMyMzExQzIzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjBGRUU2QzUyRTdGMTFFMkEwMDdGRkFDMzIzMTFDMjMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjBGRUU2QzYyRTdGMTFFMkEwMDdGRkFDMzIzMTFDMjMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5hjT/5AAAA8ElEQVR42syXwQ3DIAxFUbtAR+gIHLsSN2+SboA6CSOEMbghJqCAHKlNmwYwkWvpKwdinmRsY4Sos2sSJJkknxRX8rgG+C/ZJG4YG2XQt9kuSVMHcK0J96qGzgOgi+Ya+GhoFfwo6C5890wBIGqto5SScuYf2fvTKcMW895T4G/ZblrARLh5bQ5VTjnMg+ClyUCL0yA4iJ7ONABewu17koQIz8z+2iTCaY3hG7zG7yQYjS3UbMnFVk5sDYStZbJdEizX4hnBDqeD21bNOedECKF8lVLCWttTuvekx9+MPmzDHut4yzrQsz5hDn+0PQUYAOGQcmTsT0IpAAAAAElFTkSuQmCC"
- }, {
- name: "fork",
- position: "ne",
- events: {
- pointerdown: "startForking",
- pointermove: "doFork",
- pointerup: "stopForking"
- },
- icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUUEAUZcNUVHAAAALtJREFUWMPtlt0RgjAMgL9zAkZglI7ACLoJm8RNHIERGMER6ksfsIeRtsGq9LvLW2i+oz8JNBoHYAZcTQEfQoCupoAH7sBZS1jGDAwbCgwh1yfEDejfCSx/3SsksXAcIxsTZYfiSQJrEiUCT1sQ45TFNQkJ33aphzB1f9ckZK9rKBkHM2YqfYgsJIr5aYnJshfkSJj3Ak3C5fQCSwmTh+hTEh4YTwUCF+D6DRNPcTuuPpD8/UhWfShtNFQe+d/oVK9MAB0AAAAASUVORK5CYII="
- }, {
- name: "unlink",
- position: "w",
- events: {
- pointerdown: "unlinkElement"
- },
- icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJCNjcxNUZBMkU3RjExRTI5RURCRDA5NDlGRDBFMDgwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJCNjcxNUZCMkU3RjExRTI5RURCRDA5NDlGRDBFMDgwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkI2NzE1RjgyRTdGMTFFMjlFREJEMDk0OUZEMEUwODAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkI2NzE1RjkyRTdGMTFFMjlFREJEMDk0OUZEMEUwODAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5htS6kAAABHElEQVR42uxW0Q2DIBBV0wEcwRHsBo7QERjBbkAnYARGaDdghI5gN9ANKCRHQy4HxFakH77kxeTAe95xd1JrrasSaKpCOIR3R2+oDLXHp+GQU3RAYhyezsZyCU8gwJGdgX3+wXcHfi1HyOwHGsQpuMjXprwFMU3QavGTtzHkwGJZIXoxFBBtyOer8opKog0ykQ0qrSoQpTsy7gfZg9EtKu/cnbBvm4iC454PijKUgQ4WYy9rot0Y6gBMhQvKoY70dYs+TERqAcOe4dXwsUXbWdF7IgsztM3/jsziqd69uLZqp/GbdgoNEJF7gMR+BC7KfuXInBIfwJrELF4Ss5yCLaiz4S3isyv6W8QXAbHXRaDI1ac+LvSHcC68BRgAHv/CnODh8mEAAAAASUVORK5CYII="
- }, {
- name: "rotate",
- position: "sw",
- events: {
- pointerdown: "startRotating",
- pointermove: "doRotate",
- pointerup: "stopBatch"
- },
- icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI1NTk5RUFBMkU3RjExRTI4OUIyQzYwMkMyN0MxMDE3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI1NTk5RUFCMkU3RjExRTI4OUIyQzYwMkMyN0MxMDE3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjU1OTlFQTgyRTdGMTFFMjg5QjJDNjAyQzI3QzEwMTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjU1OTlFQTkyRTdGMTFFMjg5QjJDNjAyQzI3QzEwMTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6W+5aDAAABJElEQVR42syXbRGDMAyGYTcBOBgSkICESWAOmAMcTAJzgAQksCnYHFRC13Jlx7qkDf0Acvf+6ZF7mjRNQ8o5T/ZqmVAt1AkxIa5JrvXqmywUsAVANkmf3BV6RqKjSvpWlqD+7OYBhKKHoMNS6EuddaPUqjUqfIJyPb2Ysyye0pC6Qm0I8680KJ/vhDmcFbU2mAb9glvk48KhMAtiYY7RYunxuRVWcI2cqa/ZegBYFGWA5jPYwAy4MrGhI1hf6FaA8gPg/PSA9tSbcAz8il2XOIRM9SILXVxki3GdEvUmD6bhIHYDQeFrtEwUvsYj0WBRx34Wc5cXJcQg8GMpMPrUBsBb6DHrbie1IdNUeRe6UNLVRB72Nh1v9zfQR/+FSbf6afsIMAB0elCwFZfPigAAAABJRU5ErkJggg=="
- }],
- type: "surrounding",
- pieSliceAngle: 45,
- pieStartAngleOffset: 0,
- pieIconSize: 14,
- linkAttributes: {},
- smoothLinks: void 0
- },
- initialize: function(a) {
- this.options = _.extend({}, _.result(this, "options"), a || {}), _.defaults(this.options, {
- paper: this.options.cellView.paper,
- graph: this.options.cellView.paper.model
- }), _.bindAll(this, "pointermove", "pointerup", "render", "update", "remove"),
- joint.ui.Halo.clear(this.options.paper),
- this.listenTo(this.options.graph, "reset", this.remove),
- this.listenTo(this.options.graph, "all", this.update),
- this.listenTo(this.options.paper, "blank:pointerdown halo:create", this.remove),
- this.listenTo(this.options.paper, "scale translate", this.update),
- this.listenTo(this.options.cellView.model, "remove", this.remove),
- $(document.body).on("mousemove touchmove", this.pointermove),
- $(document).on("mouseup touchend", this.pointerup),
- this.options.paper.$el.append(this.$el),
- this.handles = [], _.each(this.options.handles, this.addHandle, this)
- },
- render: function() {
- var a = this.options;
- switch (this.$el.empty(), this.$handles = $("").addClass("handles").appendTo(this.el), this.$box = $("").addClass("box").appendTo(this.el), this.$el.addClass(a.type), this.$el.attr("data-type", a.cellView.model.get("type")), this.$handles.append(_.map(this.handles, this.renderHandle, this)), a.type) {
- case "toolbar":
- case "surrounding":
- this.hasHandle("fork") && this.toggleFork();
- break;
- case "pie":
- this.$pieToggle = $("").addClass("pie-toggle").appendTo(this.el);
- break;
- default:
- throw new Error("ui.Halo: unknown type")
- }
- return this.update(), this.$el.addClass("animate").appendTo(a.paper.el), this
- },
- update: function() {
- var a = this.options.cellView;
- if (!(a.model instanceof joint.dia.Link)) {
- this.updateBoxContent();
- var b = a.getBBox({
- useModelGeometry: this.options.useModelGeometry
- });
- this.$el.toggleClass("tiny", b.width < this.options.tinyThreshold && b.height < this.options.tinyThreshold), this.$el.toggleClass("small", !this.$el.hasClass("tiny") && b.width < this.options.smallThreshold && b.height < this.options.smallThreshold), this.$el.css({
- width: b.width,
- height: b.height,
- left: b.x,
- top: b.y
- }), this.hasHandle("unlink") && this.toggleUnlink()
- }
- },
- updateBoxContent: function() {
- if (this.$box) {
- var a = this.options.boxContent,
- b = this.options.cellView;
- if (_.isFunction(a)) {
- var c = a.call(this, b, this.$box[0]);
- c && this.$box.html(c)
- } else a ? this.$box.html(a) : this.$box.remove()
- }
- },
- addHandle: function(a) {
- var b = this.getHandle(a.name);
- if (!b && (this.handles.push(a), _.each(a.events, function(b, c) {
- _.isString(b) ? this.on("action:" + a.name + ":" + c, this[b], this) : this.on("action:" + a.name + ":" + c, b)
- }, this), this.$handles)) {
- this.renderHandle(a).appendTo(this.$handles)
- }
- return this
- },
- renderHandle: function(a) {
- var b = this.getHandleIdx(a.name),
- c = $("").addClass("handle").addClass(a.name).attr("data-action", a.name).prop("draggable", !1);
- switch (this.options.type) {
- case "toolbar":
- case "surrounding":
- c.addClass(a.position), a.content && c.html(a.content);
- break;
- case "pie":
- var d = this.PIE_OUTER_RADIUS,
- e = this.PIE_INNER_RADIUS,
- f = (d + e) / 2,
- h = joint.g.point(d, d),
- i = joint.g.toRad(this.options.pieSliceAngle),
- j = b * i + joint.g.toRad(this.options.pieStartAngleOffset),
- k = j + i,
- l = V.createSlicePathData(e, d, j, k),
- m = V("svg").addClass("slice-svg"),
- n = V("path").attr("d", l).addClass("slice"),
- o = joint.g.point.fromPolar(f, -j - i / 2, h),
- p = this.options.pieIconSize,
- q = V("image").attr(o).addClass("slice-icon");
- q.attr({
- width: p,
- height: p
- }), q.translate(-p / 2, -p / 2), m.append([n, q]), c.append(m.node)
- }
- return a.icon && this.setHandleIcon(c, a.icon), joint.util.setAttributesBySelector(c, a.attrs), c
- },
- setHandleIcon: function(a, b) {
- switch (this.options.type) {
- case "pie":
- var c = a.find(".slice-icon");
- V(c[0]).attr("xlink:href", b);
- break;
- case "toolbar":
- case "surrounding":
- a.css("background-image", "url(" + b + ")")
- }
- },
- removeHandle: function(a) {
- var b = this.getHandleIdx(a),
- c = this.handles[b];
- return c && (_.each(c.events, function(b, c) {
- this.off("action:" + a + ":" + c)
- }, this), this.$(".handle." + a).remove(), this.handles.splice(b, 1)), this
- },
- changeHandle: function(a, b) {
- var c = this.getHandle(a);
- return c && (this.removeHandle(a), this.addHandle(_.merge({
- name: a
- }, c, b))), this
- },
- hasHandle: function(a) {
- return -1 !== this.getHandleIdx(a)
- },
- getHandleIdx: function(a) {
- return _.findIndex(this.handles, {
- name: a
- })
- },
- getHandle: function(a) {
- return _.findWhere(this.handles, {
- name: a
- })
- },
- toggleHandle: function(a, b) {
- var c = this.getHandle(a);
- if (c) {
- var d = this.$(".handle." + a);
- _.isUndefined(b) && (b = !d.hasClass("selected")), d.toggleClass("selected", b);
- var e = b ? c.iconSelected : c.icon;
- e && this.setHandleIcon(d, e)
- }
- return this
- },
- selectHandle: function(a) {
- return this.toggleHandle(a, !0)
- },
- deselectHandle: function(a) {
- return this.toggleHandle(a, !1)
- },
- deselectAllHandles: function() {
- return _.chain(this.handles).pluck("name").each(this.deselectHandle, this).value(), this
- },
- onHandlePointerDown: function(a) {
- this._action = $(a.target).closest(".handle").attr("data-action"), this._action && (a.preventDefault(), a.stopPropagation(), a = joint.util.normalizeEvent(a), this._clientX = a.clientX, this._clientY = a.clientY, this._startClientX = this._clientX, this._startClientY = this._clientY, this.triggerAction(this._action, "pointerdown", a))
- },
- onPieTogglePointerDown: function(a) {
- a.stopPropagation(), this.toggleState()
- },
- triggerAction: function(a, b, c) {
- var d = Array.prototype.slice.call(arguments, 2);
- d.unshift("action:" + a + ":" + b), this.trigger.apply(this, d)
- },
- startCloning: function(a) {
- var b = this.options;
- b.graph.trigger("batch:start");
- var c = b.clone(b.cellView.model, {
- clone: !0
- });
- if (!(c instanceof joint.dia.Cell)) throw new Error('ui.Halo: option "clone" has to return a cell.');
- c.addTo(b.graph, {
- halo: this.cid
- }), this._cloneView = c.findView(b.paper), this._cloneView.pointerdown(a, this._clientX, this._clientY)
- },
- startLinking: function(a) {
- this.options.graph.trigger("batch:start");
- var b = this.options.cellView,
- c = $.data(a.target, "selector"),
- d = this.options.paper.getDefaultLink(b, c && b.el.querySelector(c));
- d.set("source", {
- id: b.model.id,
- selector: c
- }), d.set("target", {
- x: a.clientX,
- y: a.clientY
- }), d.attr(this.options.linkAttributes), _.isBoolean(this.options.smoothLinks) && d.set("smooth", this.options.smoothLinks), this.options.graph.addCell(d, {
- validation: !1,
- halo: this.cid
- }), d.set("target", this.options.paper.snapToGrid({
- x: a.clientX,
- y: a.clientY
- })), this._linkView = this.options.paper.findViewByModel(d), this._linkView.startArrowheadMove("target")
- },
- startForking: function(a) {
- var b = this.options;
- b.graph.trigger("batch:start");
- var c = b.clone(b.cellView.model, {
- fork: !0
- });
- if (!(c instanceof joint.dia.Cell)) throw new Error('ui.Halo: option "clone" has to return a cell.');
- var d = b.paper.getDefaultLink(b.cellView).set({
- source: {
- id: b.cellView.model.id
- },
- target: {
- id: c.id
- }
- });
- d.attr(b.linkAttributes), _.isBoolean(b.smoothLinks) && d.set("smooth", b.smoothLinks), b.graph.addCells([c, d], {
- halo: this.cid
- }), this._cloneView = c.findView(b.paper), this._cloneView.pointerdown(a, this._clientX, this._clientY)
- },
- startResizing: function(a) {
- this.options.graph.trigger("batch:start"), this._flip = [1, 0, 0, 1, 1, 0, 0, 1][Math.floor(joint.g.normalizeAngle(this.options.cellView.model.get("angle")) / 45)]
- },
- startRotating: function(a) {
- this.options.graph.trigger("batch:start");
- var b = this.options.cellView.model.getBBox().center(),
- c = joint.g.normalizeAngle(this.options.cellView.model.get("angle")),
- d = this.options.paper.snapToGrid({
- x: a.clientX,
- y: a.clientY
- });
- this._center = b, this._rotationStartAngle = c || 0, this._clientStartAngle = joint.g.point(d).theta(b)
- },
- doResize: function(a, b, c) {
- var d = this.options.cellView.model.get("size"),
- e = Math.max(d.width + (this._flip ? b : c), 1),
- f = Math.max(d.height + (this._flip ? c : b), 1);
- this.options.cellView.model.resize(e, f, {
- absolute: !0
- })
- },
- doRotate: function(a) {
- var b = this.options.paper.snapToGrid({
- x: a.clientX,
- y: a.clientY
- }),
- c = this._clientStartAngle - joint.g.point(b).theta(this._center),
- d = joint.g.snapToGrid(this._rotationStartAngle + c, this.options.rotateAngleGrid);
- this.options.cellView.model.rotate(d, !0)
- },
- doClone: function(a) {
- this._cloneView.pointermove(a, this._clientX, this._clientY)
- },
- doFork: function(a) {
- this._cloneView.pointermove(a, this._clientX, this._clientY)
- },
- doLink: function(a) {
- var b = this.options.paper.snapToGrid({
- x: a.clientX,
- y: a.clientY
- });
- this._linkView.pointermove(a, b.x, b.y)
- },
- stopLinking: function(a) {
- var b = this._linkView,
- c = b.model;
- b.pointerup(a), c.hasLoop() && this.makeLoopLink(c), this.options.paper.options.linkPinning || _.has(c.get("target"), "id") ? (this.stopBatch(), this.triggerAction("link", "add", c)) : (c.remove({
- ui: !0
- }), this.stopBatch()), delete this._linkView
- },
- stopForking: function(a) {
- this._cloneView.pointerup(a, this._clientX, this._clientY), this.stopBatch()
- },
- stopCloning: function(a) {
- this._cloneView.pointerup(a, this._clientX, this._clientY), this.stopBatch()
- },
- pointermove: function(a) {
- if (this._action) {
- a.preventDefault(), a.stopPropagation(), a = joint.util.normalizeEvent(a);
- var b = this.options.paper.snapToGrid({
- x: a.clientX,
- y: a.clientY
- }),
- c = this.options.paper.snapToGrid({
- x: this._clientX,
- y: this._clientY
- }),
- d = b.x - c.x,
- e = b.y - c.y;
- this.triggerAction(this._action, "pointermove", a, d, e, a.clientX - this._startClientX, a.clientY - this._startClientY), this._clientX = a.clientX, this._clientY = a.clientY
- }
- },
- pointerup: function(a) {
- this._action && (this.triggerAction(this._action, "pointerup", a), delete this._action)
- },
- stopBatch: function() {
- this.options.graph.trigger("batch:stop")
- },
- remove: function(a) {
- Backbone.View.prototype.remove.apply(this, arguments), $(document.body).off("mousemove touchmove", this.pointermove), $(document).off("mouseup touchend", this.pointerup)
- },
- removeElement: function(a) {
- this.options.cellView.model.remove()
- },
- unlinkElement: function(a) {
- this.options.graph.removeLinks(this.options.cellView.model)
- },
- toggleUnlink: function() {
- var a = this.options.graph.getConnectedLinks(this.options.cellView.model).length > 0;
- this.$handles.children(".unlink").toggleClass("hidden", !a)
- },
- toggleFork: function() {
- var a = this.options.cellView.model.clone(),
- b = this.options.paper.createViewForModel(a),
- c = this.options.paper.options.validateConnection(this.options.cellView, null, b, null, "target");
- this.$handles.children(".fork").toggleClass("hidden", !c), b.remove(), a = null
- },
- toggleState: function() {
- var a = this.$el;
- this.isOpen() ? (a.removeClass("open"), this.trigger("state:close")) : (a.addClass("open"), this.trigger("state:open"))
- },
- isOpen: function() {
- return this.$el.hasClass("open")
- },
- makeLoopLink: function(a) {
- var b, c, d = this.options.loopLinkWidth,
- e = this.options.paper.options,
- f = joint.g.rect({
- x: 0,
- y: 0,
- width: e.width,
- height: e.height
- }),
- h = V(this.options.cellView.el).bbox(!1, this.options.paper.viewport),
- i = _.uniq([this.options.loopLinkPreferredSide, "top", "bottom", "left", "right"]),
- j = _.find(i, function(a) {
- var e, i = 0,
- j = 0;
- switch (a) {
- case "top":
- e = joint.g.point(h.x + h.width / 2, h.y - d), i = d / 2;
- break;
- case "bottom":
- e = joint.g.point(h.x + h.width / 2, h.y + h.height + d), i = d / 2;
- break;
- case "left":
- e = joint.g.point(h.x - d, h.y + h.height / 2), j = d / 2;
- break;
- case "right":
- e = joint.g.point(h.x + h.width + d, h.y + h.height / 2), j = d / 2
- }
- return b = joint.g.point(e).offset(-i, -j), c = joint.g.point(e).offset(i, j), f.containsPoint(b) && f.containsPoint(c)
- }, this);
- j && a.set("vertices", [b, c])
- }
-}, {
- clear: function(a) {
- a.trigger("halo:create")
- }
-});
\ No newline at end of file
diff --git a/app/joint/joint.ui.selectionView.css b/app/joint/joint.ui.selectionView.css
deleted file mode 100644
index 178cea68..00000000
--- a/app/joint/joint.ui.selectionView.css
+++ /dev/null
@@ -1,42 +0,0 @@
-/*! JointJS+ - Set of JointJS compatible plugins
-
-Copyright (c) 2013 client IO
-
- 2014-01-22
-
-
-This Source Code Form is subject to the terms of the JointJS+ License
-, v. 1.0. If a copy of the JointJS+ License was not distributed with this
-file, You can obtain one at http://jointjs.com/license/jointjs_plus_v1.txt
- or from the JointJS+ archive as was distributed by client IO. See the LICENSE file.*/
-
-.selection {
- position: absolute;
- border: 2px solid #3d9970;
- border-radius: 3px;
- overflow: visible;
- background-color: rgba(61, 153, 112, 0.2);
-}
-
-.selected .selection-wrapper {
- position: absolute;
- transform: scale(1.3);
- border: 2px solid #3d9970;
- border-radius: 3px;
-}
-
-.selection.selected {
- position: static;
- height: 0 !important;
- border: none;
- background-color: transparent;
- /* Position the selection rectangle static so that the selection-boxe are contained within the paper container (which is supposed to be positioned relative). The height 0 !important makes sure the selection rectangle is not-visible, only the selection-boxes inside it (thanks to overflow: visible). */
-}
-
-.selection-box {
- position: absolute;
- border-radius: 2px;
- border: 1px dashed #3d9970;
- transform: scale(1.15);
- cursor: move;
-}
diff --git a/app/joint/joint.ui.selectionView.js b/app/joint/joint.ui.selectionView.js
deleted file mode 100644
index 0ffaf87b..00000000
--- a/app/joint/joint.ui.selectionView.js
+++ /dev/null
@@ -1,310 +0,0 @@
-import $ from "jquery";
-import _ from "underscore";
-import "backbone";
-import * as joint from "jointjs/dist/joint";
-
-joint.ui.SelectionView = Backbone.View.extend({
- options: {
- paper: void 0,
- graph: void 0,
- boxContent: function(a) {
- // var b = _.template("<%= length %> elements selected.");
- // return b({
- // length: this.model.length
- // })
- },
- handles: [{
- name: "remove",
- position: "nw",
- events: {
- pointerdown: "removeElements"
- }
- }, {
- name: "rotate",
- position: "sw",
- events: {
- pointerdown: "startRotating",
- pointermove: "doRotate",
- pointerup: "stopBatch"
- }
- }],
- useModelGeometry: !1
- },
- className: "selection",
- events: {
- "mousedown .selection-box": "startTranslatingSelection",
- "touchstart .selection-box": "startTranslatingSelection",
- "mousedown .handle": "onHandlePointerDown",
- "touchstart .handle": "onHandlePointerDown"
- },
- initialize: function(a) {
- if (this.options = _.extend({}, _.result(this, "options"), a || {}), !a.paper) throw new Error("SelectionView: paper required");
- _.defaults(this.options, {
- graph: a.paper.model
- }), _.bindAll(this, "startSelecting", "stopSelecting", "adjustSelection", "pointerup"), $(document.body).on("mousemove.selectionView touchmove.selectionView", this.adjustSelection), $(document).on("mouseup.selectionView touchend.selectionView", this.pointerup), this.listenTo(this.options.graph, "reset", this.cancelSelection), this.listenTo(this.options.paper, "scale translate", this.updateSelectionBoxes), this.listenTo(this.options.graph, "remove change", function(a, b) {
- b["selectionView_" + this.cid] || this.updateSelectionBoxes()
- }), this.options.paper.$el.append(this.$el), this._boxCount = 0, this.$selectionWrapper = this.createSelectionWrapper(), this.handles = [], _.each(this.options.handles, this.addHandle, this)
- },
- addHandle: function(a) {
- this.handles.push(a);
- var b = $("", {
- "class": "handle " + (a.position || "") + " " + (a.name || ""),
- "data-action": a.name
- });
- return a.icon && b.css("background-image", "url(" + a.icon + ")"), b.html(a.content || ""), this.$selectionWrapper.append(b), _.each(a.events, function(b, c) {
- _.isString(b) ? this.on("action:" + a.name + ":" + c, this[b], this) : this.on("action:" + a.name + ":" + c, b)
- }, this), this
- },
- removeHandle: function(a) {
- var b = _.findIndex(this.handles, {
- name: a
- }),
- c = this.handles[b];
- return c && (_.each(c.events, function(b, c) {
- this.off("action:" + a + ":" + c)
- }, this), this.$(".handle." + a).remove(), this.handles.splice(b, 1)), this
- },
- changeHandle: function(a, b) {
- var c = _.findWhere(this.handles, {
- name: a
- });
- return c && (this.removeHandle(a), this.addHandle(_.merge({
- name: a
- }, c, b))), this
- },
- startTranslatingSelection: function(a) {
- a.stopPropagation(), a = joint.util.normalizeEvent(a), this._action = "translating", this.options.graph.trigger("batch:start");
- var b = this.options.paper.snapToGrid(joint.g.point(a.clientX, a.clientY));
- this._snappedClientX = b.x, this._snappedClientY = b.y, this.trigger("selection-box:pointerdown", a)
- },
- startSelecting: function(a) {
- a = joint.util.normalizeEvent(a), this.cancelSelection(), this._action = "selecting", this._clientX = a.clientX, this._clientY = a.clientY;
- var b = a.target.parentElement || a.target.parentNode,
- c = $(b).offset(),
- d = b.scrollLeft,
- e = b.scrollTop;
- this._offsetX = void 0 === a.offsetX ? a.clientX - c.left + window.pageXOffset + d : a.offsetX, this._offsetY = void 0 === a.offsetY ? a.clientY - c.top + window.pageYOffset + e : a.offsetY, this.$el.css({
- width: 1,
- height: 1,
- left: this._offsetX,
- top: this._offsetY
- }).show()
- },
- adjustSelection: function(a) {
- a = joint.util.normalizeEvent(a);
- var b, c;
- switch (this._action) {
- case "selecting":
- b = a.clientX - this._clientX, c = a.clientY - this._clientY;
- var d = (this.$el.width(), this.$el.height(), parseInt(this.$el.css("left"), 10)),
- e = parseInt(this.$el.css("top"), 10);
- this.$el.css({
- left: 0 > b ? this._offsetX + b : d,
- top: 0 > c ? this._offsetY + c : e,
- width: Math.abs(b),
- height: Math.abs(c)
- });
- break;
- case "translating":
- var f = this.options.paper.snapToGrid(joint.g.point(a.clientX, a.clientY)),
- h = f.x,
- i = f.y;
- if (b = h - this._snappedClientX, c = i - this._snappedClientY, b || c) {
- var j = {};
- if (this.model.each(function(a) {
- if (!j[a.id]) {
- var d = {};
- d["selectionView_" + this.cid] = !0, a.translate(b, c, d), _.each(a.getEmbeddedCells({
- deep: !0
- }), function(a) {
- j[a.id] = !0
- });
- var e = this.options.graph.getConnectedLinks(a);
- _.each(e, function(a) {
- j[a.id] || (a.translate(b, c, d), j[a.id] = !0)
- })
- }
- }, this), this.boxesUpdated) this.model.length > 1 && this.updateSelectionBoxes();
- else {
- var k = joint.V(this.options.paper.viewport).scale();
- this.$el.children(".selection-box").add(this.$selectionWrapper).css({
- left: "+=" + b * k.sx,
- top: "+=" + c * k.sy
- })
- }
- this._snappedClientX = h, this._snappedClientY = i
- }
- this.trigger("selection-box:pointermove", a);
- break;
- default:
- this._action && this.pointermove(a)
- }
- this.boxesUpdated = !1
- },
- stopSelecting: function(a) {
- switch (this._action) {
- case "selecting":
- var b = this.$el.offset(),
- c = this.$el.width(),
- d = this.$el.height(),
- e = this.options.paper,
- f = joint.V(e.viewport).toLocalPoint(b.left, b.top);
- f.x -= window.pageXOffset, f.y -= window.pageYOffset;
- var h = joint.V(e.viewport).scale();
- c /= h.sx, d /= h.sy;
- var i = joint.g.rect(f.x, f.y, c, d),
- j = this.options.useModelGeometry ? _.filter(_.map(e.model.findModelsInArea(i), e.findViewByModel, e)) : e.findViewsInArea(i),
- k = this.options.filter;
- _.isArray(k) ? j = _.reject(j, function(a) {
- return _.contains(k, a.model) || _.contains(k, a.model.get("type"))
- }) : _.isFunction(k) && (j = _.reject(j, function(a) {
- return k(a.model)
- })), this.model.reset(_.pluck(j, "model"), {
- ui: !0
- }), j.length ? (_.each(j, this.createSelectionBox, this), this.$el.addClass("selected")) : this.$el.hide();
- break;
- case "translating":
- this.options.graph.trigger("batch:stop"), this.trigger("selection-box:pointerup", a);
- break;
- default:
- this._action || this.cancelSelection()
- }
- delete this._action
- },
- pointerup: function(a) {
- this._action && (this.triggerAction(this._action, "pointerup", a), this.stopSelecting(), delete this._action)
- },
- cancelSelection: function() {
- this.destroyAllSelectionBoxes(), this.model.reset([], {
- ui: !0
- })
- },
- destroyAllSelectionBoxes: function() {
- this.$el.hide().children(".selection-box").remove(), this.$el.removeClass("selected"), this._boxCount = 0, this.updateSelectionWrapper()
- },
- destroySelectionBox: function(a) {
- this.$('[data-model="' + a.model.get("id") + '"]').remove(), 0 === this.$el.children(".selection-box").length && this.$el.hide().removeClass("selected"), this._boxCount = Math.max(0, this._boxCount - 1), this.updateSelectionWrapper()
- },
- createSelectionBox: function(a) {
- var b = a.getBBox({
- useModelGeometry: this.options.useModelGeometry
- }),
- c = $("", {
- "class": "selection-box",
- "data-model": a.model.get("id")
- });
- c.css({
- left: b.x,
- top: b.y,
- width: b.width,
- height: b.height
- }), this.$el.append(c), this.$el.addClass("selected").show(), this._boxCount++, this.updateSelectionWrapper()
- },
- createSelectionWrapper: function() {
- var a = $("", {
- "class": "selection-wrapper"
- }),
- b = $("", {
- "class": "box"
- });
- return a.append(b), a.attr("data-selection-length", this.model.length), this.$el.prepend(a), a
- },
- updateSelectionWrapper: function() {
- var a = {
- x: 1 / 0,
- y: 1 / 0
- },
- b = {
- x: 0,
- y: 0
- };
- if (this.model.each(function(c) {
- var d = this.options.paper.findViewByModel(c);
- if (d) {
- var e = d.getBBox({
- useModelGeometry: this.options.useModelGeometry
- });
- a.x = Math.min(a.x, e.x), a.y = Math.min(a.y, e.y), b.x = Math.max(b.x, e.x + e.width), b.y = Math.max(b.y, e.y + e.height)
- }
- }, this), this.$selectionWrapper.css({
- left: a.x,
- top: a.y,
- width: b.x - a.x,
- height: b.y - a.y
- }).attr("data-selection-length", this.model.length), _.isFunction(this.options.boxContent)) {
- var c = this.$(".box"),
- d = this.options.boxContent.call(this, c[0]);
- d && c.html(d)
- }
- },
- updateSelectionBoxes: function() {
- if (this._boxCount) {
- var a = this.$el.hide().removeClass("selected").children(".selection-box");
- _.each(a, function(a) {
- var b = $(a).remove().attr("data-model"),
- c = this.model.get(b),
- d = c && this.options.paper.findViewByModel(c);
- d && this.createSelectionBox(d)
- }, this), this.updateSelectionWrapper(), this.boxesUpdated = !0
- }
- },
- remove: function() {
- Backbone.View.prototype.remove.apply(this, arguments), $(document.body).off(".selectionView", this.adjustSelection), $(document).off(".selectionView", this.pointerup)
- },
- onHandlePointerDown: function(a) {
- this._action = $(a.target).closest(".handle").attr("data-action"), this._action && (a.preventDefault(), a.stopPropagation(), a = joint.util.normalizeEvent(a), this._clientX = a.clientX, this._clientY = a.clientY, this._startClientX = this._clientX, this._startClientY = this._clientY, this.triggerAction(this._action, "pointerdown", a))
- },
- pointermove: function(a) {
- if (this._action) {
- var b = this.options.paper.snapToGrid({
- x: a.clientX,
- y: a.clientY
- }),
- c = this.options.paper.snapToGrid({
- x: this._clientX,
- y: this._clientY
- }),
- d = b.x - c.x,
- e = b.y - c.y;
- this.triggerAction(this._action, "pointermove", a, d, e, a.clientX - this._startClientX, a.clientY - this._startClientY), this._clientX = a.clientX, this._clientY = a.clientY
- }
- },
- triggerAction: function(a, b, c) {
- var d = Array.prototype.slice.call(arguments, 2);
- d.unshift("action:" + a + ":" + b), this.trigger.apply(this, d)
- },
- removeElements: function(a) {
- var b = this.model.models;
- this.cancelSelection(), this.options.graph.trigger("batch:start"), _.invoke(b, "remove"), this.options.graph.trigger("batch:stop")
- },
- startRotating: function(a) {
- this.options.graph.trigger("batch:start");
- var b = this.options.graph.getBBox(this.model.models);
- if (this._center = b.center(), "undefined" == typeof a.offsetX || "undefined" == typeof a.offsetY) {
- var c = $(a.target).offset();
- a.offsetX = a.pageX - c.left, a.offsetY = a.pageY - c.top
- }
- this._rotationStart = joint.g.point(a.offsetX + a.target.parentNode.offsetLeft, a.offsetY + a.target.parentNode.offsetTop + a.target.parentNode.offsetHeight), this._rotationStartAngle = {}, this.model.each(function(a) {
- this._rotationStartAngle[a.id] = a.get("angle") || 0
- }, this)
- },
- doRotate: function(a, b, c, d, e) {
- var f = joint.g.point(this._rotationStart).offset(d, e),
- h = f.distance(this._center),
- i = this._center.distance(this._rotationStart),
- j = this._rotationStart.distance(f),
- k = (this._center.x - this._rotationStart.x) * (f.y - this._rotationStart.y) - (this._center.y - this._rotationStart.y) * (f.x - this._rotationStart.x),
- l = Math.acos((h * h + i * i - j * j) / (2 * h * i));
- 0 >= k && (l = -l);
- var m = -joint.g.toDeg(l);
- m = joint.g.snapToGrid(m, 15), this.model.each(function(a) {
- a.rotate(m + this._rotationStartAngle[a.id], !0, this._center)
- }, this)
- },
- stopBatch: function() {
- this.options.graph.trigger("batch:stop")
- },
- getAction: function() {
- return this._action
- }
-});
diff --git a/app/joint/joint.ui.stencil.css b/app/joint/joint.ui.stencil.css
deleted file mode 100644
index 324d1175..00000000
--- a/app/joint/joint.ui.stencil.css
+++ /dev/null
@@ -1,94 +0,0 @@
-/*! JointJS+ - Set of JointJS compatible plugins
-Copyright (c) 2013 client IO
- 2014-01-22
-This Source Code Form is subject to the terms of the JointJS+ License
-, v. 1.0. If a copy of the JointJS+ License was not distributed with this
-file, You can obtain one at http://jointjs.com/license/jointjs_plus_v1.txt
- or from the JointJS+ archive as was distributed by client IO. See the LICENSE file.*/
-
-
-.stencil {
- width: 126px;
- float: left;
- border: 1px solid gray;
-}
-
-.stencil .elements {
- background-color: white;
- height: 100%;
- width: 100%;
-}
-
-/* This element is being dragged when a new element is about to be dropped into the main paper. */
-.stencil-paper-drag {
- position: absolute;
- z-index: 100;
- width: 800;
- height: 800;
- top: -10000;
- left: -10000;
- display: none;
-}
-.stencil-paper-drag.dragging {
- display: block;
- opacity: .7;
-}
-
-.stencil .group {
- overflow: hidden;
- padding-left: 10px;
- margin-bottom: 1px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- transition: max-height 400ms linear;
- max-height: 400px;
-}
-.stencil .group.closed {
- height: 26px;
- max-height: 26px;
-}
-
-.stencil .group > .group-label {
- padding: 5px 4px;
- position: relative;
- left: -10px;
- margin-right: -20px;
- margin-top: 0;
- margin-bottom: 0;
- font-size: 10px;
- font-weight: 700;
- text-transform: uppercase;
- border-top: 1px solid #3a3a3a;
- border-bottom: 2px solid #1f1f1f;
- background: #242424;
- cursor: pointer;
- color: #bcbcbc;
-}
-.stencil .group > .group-label:before {
- content: '';
- width: 0;
- height: 0;
- display: inline-block;
- margin-left: 2px;
- margin-right: 5px;
- position: relative;
- top: 5px;
- border-top: 5px solid white;
- border-right: 5px solid transparent;
- border-left: 5px solid transparent;
- border-bottom: 5px solid transparent;
-}
-.stencil .group.closed > .group-label:before {
- top: 2px;
- left: 2px;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-right: 5px solid transparent;
- border-left: 5px solid white;
-}
-
-.stencil .element [magnet] {
- pointer-events: none;
-}
\ No newline at end of file
diff --git a/app/joint/joint.ui.stencil.js b/app/joint/joint.ui.stencil.js
deleted file mode 100644
index 620b1ea5..00000000
--- a/app/joint/joint.ui.stencil.js
+++ /dev/null
@@ -1,395 +0,0 @@
-import $ from "jquery";
-import _ from "underscore";
-import "backbone";
-import * as joint from "jointjs/dist/joint";
-
-var Handlebars = {};
-! function (a, b) {
- a.VERSION = "1.0.0", a.COMPILER_REVISION = 4, a.REVISION_CHANGES = {
- 1: "<= 1.0.rc.2",
- 2: "== 1.0.0-rc.3",
- 3: "== 1.0.0-rc.4",
- 4: ">= 1.0.0"
- }, a.helpers = {}, a.partials = {};
- var c = Object.prototype.toString,
- d = "[object Function]",
- e = "[object Object]";
- a.registerHelper = function (b, d, f) {
- if (c.call(b) === e) {
- if (f || d) throw new a.Exception("Arg not supported with multiple helpers");
- a.Utils.extend(this.helpers, b)
- } else f && (d.not = f), this.helpers[b] = d
- }, a.registerPartial = function (b, d) {
- c.call(b) === e ? a.Utils.extend(this.partials, b) : this.partials[b] = d
- }, a.registerHelper("helperMissing", function (a) {
- if (2 === arguments.length) return b;
- throw new Error("Missing helper: '" + a + "'")
- }), a.registerHelper("blockHelperMissing", function (b, e) {
- var f = e.inverse || function () { }, g = e.fn,
- h = c.call(b);
- return h === d && (b = b.call(this)), b === !0 ? g(this) : b === !1 || null == b ? f(this) : "[object Array]" === h ? b.length > 0 ? a.helpers.each(b, e) : f(this) : g(b)
- }), a.K = function () { }, a.createFrame = Object.create || function (b) {
- a.K.prototype = b;
- var c = new a.K;
- return a.K.prototype = null, c
- }, a.logger = {
- DEBUG: 0,
- INFO: 1,
- WARN: 2,
- ERROR: 3,
- level: 3,
- methodMap: {
- 0: "debug",
- 1: "info",
- 2: "warn",
- 3: "error"
- },
- log: function (b, c) {
- if (a.logger.level <= b) {
- var d = a.logger.methodMap[b];
- "undefined" != typeof console && console[d] && console[d].call(console, c)
- }
- }
- }, a.log = function (b, c) {
- a.logger.log(b, c)
- }, a.registerHelper("each", function (b, e) {
- var f, g = e.fn,
- h = e.inverse,
- i = 0,
- j = "",
- k = c.call(b);
- if (k === d && (b = b.call(this)), e.data && (f = a.createFrame(e.data)), b && "object" == typeof b)
- if (b instanceof Array)
- for (var l = b.length; l > i; i++) f && (f.index = i), j += g(b[i], {
- data: f
- });
- else
- for (var m in b) b.hasOwnProperty(m) && (f && (f.key = m), j += g(b[m], {
- data: f
- }), i++);
- return 0 === i && (j = h(this)), j
- }), a.registerHelper("if", function (b, e) {
- var f = c.call(b);
- return f === d && (b = b.call(this)), !b || a.Utils.isEmpty(b) ? e.inverse(this) : e.fn(this)
- }), a.registerHelper("unless", function (b, c) {
- return a.helpers["if"].call(this, b, {
- fn: c.inverse,
- inverse: c.fn
- })
- }), a.registerHelper("with", function (b, e) {
- var f = c.call(b);
- return f === d && (b = b.call(this)), a.Utils.isEmpty(b) ? void 0 : e.fn(b)
- }), a.registerHelper("log", function (b, c) {
- var d = c.data && null != c.data.level ? parseInt(c.data.level, 10) : 1;
- a.log(d, b)
- });
- var f = ["description", "fileName", "lineNumber", "message", "name", "number", "stack"];
- a.Exception = function () {
- for (var a = Error.prototype.constructor.apply(this, arguments), b = 0; b < f.length; b++) this[f[b]] = a[f[b]]
- }, a.Exception.prototype = new Error, a.SafeString = function (a) {
- this.string = a
- }, a.SafeString.prototype.toString = function () {
- return this.string.toString()
- };
- var g = {
- "&": "&",
- "<": "<",
- ">": ">",
- '"': """,
- "'": "'",
- "`": "`"
- }, h = /[&<>"'`]/g,
- i = /[&<>"'`]/,
- j = function (a) {
- return g[a] || "&"
- };
- a.Utils = {
- extend: function (a, b) {
- for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c])
- },
- escapeExpression: function (b) {
- return b instanceof a.SafeString ? b.toString() : null == b || b === !1 ? "" : (b = b.toString(), i.test(b) ? b.replace(h, j) : b)
- },
- isEmpty: function (a) {
- return a || 0 === a ? "[object Array]" === c.call(a) && 0 === a.length ? !0 : !1 : !0
- }
- }, a.VM = {
- template: function (b) {
- var c = {
- escapeExpression: a.Utils.escapeExpression,
- invokePartial: a.VM.invokePartial,
- programs: [],
- program: function (b, c, d) {
- var e = this.programs[b];
- return d ? e = a.VM.program(b, c, d) : e || (e = this.programs[b] = a.VM.program(b, c)), e
- },
- merge: function (b, c) {
- var d = b || c;
- return b && c && (d = {}, a.Utils.extend(d, c), a.Utils.extend(d, b)), d
- },
- programWithDepth: a.VM.programWithDepth,
- noop: a.VM.noop,
- compilerInfo: null
- };
- return function (d, e) {
- e = e || {};
- var f = b.call(c, a, d, e.helpers, e.partials, e.data),
- g = c.compilerInfo || [],
- h = g[0] || 1,
- i = a.COMPILER_REVISION;
- if (h !== i) {
- if (i > h) {
- var j = a.REVISION_CHANGES[i],
- k = a.REVISION_CHANGES[h];
- throw "Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version (" + j + ") or downgrade your runtime to an older version (" + k + ")."
- }
- throw "Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version (" + g[1] + ")."
- }
- return f
- }
- },
- programWithDepth: function (a, b, c) {
- var d = Array.prototype.slice.call(arguments, 3),
- e = function (a, e) {
- return e = e || {}, b.apply(this, [a, e.data || c].concat(d))
- };
- return e.program = a, e.depth = d.length, e
- },
- program: function (a, b, c) {
- var d = function (a, d) {
- return d = d || {}, b(a, d.data || c)
- };
- return d.program = a, d.depth = 0, d
- },
- noop: function () {
- return ""
- },
- invokePartial: function (c, d, e, f, g, h) {
- var i = {
- helpers: f,
- partials: g,
- data: h
- };
- if (c === b) throw new a.Exception("The partial " + d + " could not be found");
- if (c instanceof Function) return c(e, i);
- if (a.compile) return g[d] = a.compile(c, {
- data: h !== b
- }), g[d](e, i);
- throw new a.Exception("The partial " + d + " could not be compiled when running in runtime-only mode")
- }
- }, a.template = a.VM.template
-}(Handlebars),
- joint.templates = joint.templates || {},
- joint.templates.stencil = joint.templates.stencil || {},
- joint.templates.stencil["elements.html"] = Handlebars.template(function (a, b, c, d, e) {
- return this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {}, '\n'
- }),
- joint.templates.stencil["group.html"] = Handlebars.template(function (a, b, c, d, e) {
- this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {};
- var f, g = "",
- h = "function",
- i = this.escapeExpression;
- return g += '\n
', (f = c.label) ? f = f.call(b, {
- hash: {},
- data: e
- }) : (f = b.label, f = typeof f === h ? f.apply(b) : f), g += i(f) + "
\n\n"
-}), joint.templates.stencil["search.html"] = Handlebars.template(function (a, b, c, d, e) {
- return this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {}, '\n'
-}), joint.templates.stencil["stencil.html"] = Handlebars.template(function (a, b, c, d, e) {
- return this.compilerInfo = [4, ">= 1.0.0"], c = this.merge(c, a.helpers), e = e || {}, '\n\n\n'
-}), joint.ui.Stencil = Backbone.View.extend({
- className: "stencil",
- events: {
- "click .group-label": "onGroupLabelClick",
- "touchstart .group-label": "onGroupLabelClick",
- "input .search": "onSearch"
- },
- options: {
- width: 126,
- height: 500
- },
- initialize: function (a) {
- this.options = _.extend({}, _.result(this, "options"), a || {}),
- this.graphs = {},
- this.papers = {},
- this.$groups = {},
- _.bindAll(this, "onDrag", "onDragEnd"),
- $(document.body).on({
- "mousemove.stencil touchmove.stencil": this.onDrag,
- "mouseup.stencil touchend.stencil": this.onDragEnd
- }),
- this.onSearch = _.debounce(this.onSearch, 126)
- },
- render: function () {
- this.$el.html(joint.templates.stencil["stencil.html"](this.template));
- this.$content = this.$(".content");
- this.options.search && this.$el.addClass("searchable").prepend(joint.templates.stencil["search.html"]());
- var a = {
- width: this.options.width,
- height: this.options.height,
- interactive: !1
- };
- if (this.options.groups) {
- var b = _.sortBy(_.pairs(this.options.groups), function (a) {
- return a[1].index
- });
- _.each(b, function (b) {
- var c = b[0],
- d = b[1],
- e = $(joint.templates.stencil["group.html"]({
- label: d.label || c
- }));
- e.attr("data-name", c), d.closed && e.addClass("closed"), e.append($(joint.templates.stencil["elements.html"]())), this.$content.append(e), this.$groups[c] = e;
- var f = new joint.dia.Graph;
- this.graphs[c] = f;
- var g = new joint.dia.Paper(_.extend({}, a, {
- el: e.find(".elements"),
- model: f,
- width: d.width || a.width,
- height: d.height || a.height
- }));
- this.papers[c] = g
- }, this)
- } else {
- this.$content.append($(joint.templates.stencil["elements.html"]()));
- var c = new joint.dia.Graph;
- this.graphs.__default__ = c;
- var d = new joint.dia.Paper(_.extend(a, {
- el: this.$(".elements"),
- model: c
- }));
- this.papers.__default__ = d
- }
-
- this._graphDrag = new joint.dia.Graph, this._paperDrag = new joint.dia.Paper({
- el: this.$(".stencil-paper-drag"),
- width: 1,
- height: 1,
- model: this._graphDrag
- });
-
- const ctrl = this;
-
- _.each(this.papers, function (a) {
- this.listenTo(a, "cell:pointerdown", this.onDragStart)
- }, this)
-
- return this;
-
- },
- load: function (a, b) {
- var c = this.graphs[b || "__default__"];
- if (!c) throw new Error("Stencil: group " + b + " does not exist.");
- c.resetCells(a);
- var d = this.options.height;
- b && this.options.groups[b] && (d = this.options.groups[b].height), d || this.papers[b || "__default__"].fitToContent(1, 1, this.options.paperPadding || 10)
- },
- getGraph: function (a) {
- return this.graphs[a || "__default__"]
- },
- getPaper: function (a) {
- return this.papers[a || "__default__"]
- },
- onDragStart: function (a, b) {
- this.$el.addClass("dragging"), this._paperDrag.$el.addClass("dragging"), $(document.body).append(this._paperDrag.$el), this._clone = a.model.clone(), this._cloneBbox = a.getBBox();
- var c = 5;
- var d = joint.g.point(this._cloneBbox.x - this._clone.get("position").x, this._cloneBbox.y - this._clone.get("position").y);
- this._clone.set("position", {
- x: -d.x + c,
- y: -d.y + c
- }), this._graphDrag.addCell(this._clone), this._paperDrag.setDimensions(this._cloneBbox.width + 2 * c, this._cloneBbox.height + 2 * c);
- var e = document.body.scrollTop || document.documentElement.scrollTop;
- this._paperDrag.$el.offset({
- left: b.clientX - this._cloneBbox.width / 2,
- top: b.clientY + e - this._cloneBbox.height / 2
- })
- },
- onDrag: function (a) {
- if (a = joint.util.normalizeEvent(a), this._clone) {
- var b = document.body.scrollTop || document.documentElement.scrollTop;
- this._paperDrag.$el.offset({
- left: a.clientX - this._cloneBbox.width / 2,
- top: a.clientY + b - this._cloneBbox.height / 2
- })
- }
- },
- onDragEnd: function (a) {
- a = joint.util.normalizeEvent(a), this._clone && this._cloneBbox && (this.drop(a, this._clone.clone(), this._cloneBbox), this.$el.append(this._paperDrag.$el), this.$el.removeClass("dragging"), this._paperDrag.$el.removeClass("dragging"), this._clone.remove(), this._clone = void 0)
- },
- drop: function (a, b, c) {
- var d = this.options.paper,
- e = this.options.graph,
- f = d.$el.offset(),
- h = document.body.scrollTop || document.documentElement.scrollTop,
- i = document.body.scrollLeft || document.documentElement.scrollLeft,
- j = joint.g.rect(f.left + parseInt(d.$el.css("border-left-width"), 10) - i, f.top + parseInt(d.$el.css("border-top-width"), 10) - h, d.$el.innerWidth(), d.$el.innerHeight()),
- k = d.svg.createSVGPoint();
- if (k.x = a.clientX, k.y = a.clientY, j.containsPoint(k)) {
- var l = joint.V("rect", {
- width: d.options.width,
- height: d.options.height,
- x: 0,
- y: 0,
- opacity: 0
- });
- joint.V(d.svg).prepend(l);
- var m = $(d.svg).offset();
- l.remove(), k.x += i - m.left, k.y += h - m.top;
- var n = k.matrixTransform(d.viewport.getCTM().inverse()),
- o = b.getBBox();
- n.x += o.x - c.width / 2, n.y += o.y - c.height / 2, b.set("position", {
- x: joint.g.snapToGrid(n.x, d.options.gridSize),
- y: joint.g.snapToGrid(n.y, d.options.gridSize)
- }), b.unset("z"), e.addCell(b, {
- stencil: this.cid
- })
- }
- },
- filter: function (a, b) {
- var c = a.toLowerCase() == a,
- d = _.reduce(this.papers, function (d, e, f) {
- var g = e.model.get("cells").filter(function (d) {
- var f = e.findViewByModel(d),
- g = !a || _.some(b, function (b, e) {
- if ("*" != e && d.get("type") != e) return !1;
- var f = _.some(b, function (b) {
- var e = joint.util.getByPath(d.attributes, b, "/");
- return _.isUndefined(e) || _.isNull(e) ? !1 : (e = e.toString(), c && (e = e.toLowerCase()), e.indexOf(a) >= 0)
- });
- return f
- });
- return joint.V(f.el).toggleClass("unmatched", !g), g
- }, this),
- h = !_.isEmpty(g),
- i = (new joint.dia.Graph).resetCells(g);
- return this.trigger("filter", i, f), this.$groups[f] && this.$groups[f].toggleClass("unmatched", !h), e.fitToContent(1, 1, this.options.paperPadding || 10), d || h
- }, !1, this);
- this.$el.toggleClass("not-found", !d)
- },
- onSearch: function (a) {
- this.filter(a.target.value, this.options.search)
- },
- onGroupLabelClick: function (a) {
- a.preventDefault();
- var b = $(a.target).closest(".group");
- this.toggleGroup(b.data("name"))
- },
- toggleGroup: function (a) {
- this.$('.group[data-name="' + a + '"]').toggleClass("closed")
- },
- closeGroup: function (a) {
- this.$('.group[data-name="' + a + '"]').addClass("closed")
- },
- openGroup: function (a) {
- this.$('.group[data-name="' + a + '"]').removeClass("closed")
- },
- closeGroups: function () {
- this.$(".group").addClass("closed")
- },
- openGroups: function () {
- this.$(".group").removeClass("closed")
- },
- remove: function () {
- Backbone.View.prototype.remove.apply(this, arguments), $(document.body).off(".stencil", this.onDrag).off(".stencil", this.onDragEnd)
- }
-}).bind(this);
\ No newline at end of file
diff --git a/app/sass/app.scss b/app/sass/app.scss
index 534cece9..7d9e86f6 100644
--- a/app/sass/app.scss
+++ b/app/sass/app.scss
@@ -11,4 +11,5 @@
@import 'selectOptions.scss';
@import 'sql.scss';
@import 'print.scss';
-@import 'joint-custom.scss';
\ No newline at end of file
+@import 'joint-custom.scss';
+@import 'elementActions.scss';
\ No newline at end of file
diff --git a/app/sass/buttons.scss b/app/sass/buttons.scss
index e5138134..51a9bbc7 100644
--- a/app/sass/buttons.scss
+++ b/app/sass/buttons.scss
@@ -73,8 +73,8 @@
.br-help {
position: fixed;
z-index: 10;
- bottom: 36px;
- right: 24px;
+ bottom: 6px;
+ left: 6px;
font-size: 2em;
width: 42px;
height: 42px;
diff --git a/app/sass/elementActions.scss b/app/sass/elementActions.scss
new file mode 100644
index 00000000..1d8900d2
--- /dev/null
+++ b/app/sass/elementActions.scss
@@ -0,0 +1,67 @@
+////////////////////////////////////////////////////////////////////////////////
+// .halo
+////////////////////////////////////////////////////////////////////////////////
+.element-action {
+ position: absolute;
+ pointer-events: none
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// .handles
+////////////////////////////////////////////////////////////////////////////////
+.element-action .holder {
+ display: flex;
+ position: absolute;
+ top: -60px;
+ border-radius: 4px 4px 4px 0;
+ border: 4px solid #e8e8e8;
+ background-color: #e8e8e8;
+ box-shadow: -1px 0 0 rgba(0,0,0, 0.1),
+ 0 -1px 1px rgba(0,0,0, 0.3);
+}
+
+.element-action .holder:after {
+ content: '';
+ position: absolute;
+ width: 0;
+ height: 0;
+ top: 100%;
+ left: -4px;
+ margin-top: 4px;
+ border-top: 16px solid #e8e8e8;
+ border-left: 0 solid transparent;
+ border-right: 13px solid transparent;
+ box-shadow: -1px 0 0 rgba(0,0,0, 0.2);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// .halo .handle
+////////////////////////////////////////////////////////////////////////////////
+.element-action .item.hidden {display: none;}
+
+.element-action .item {
+ display: inline-block;
+ position: relative;
+ width: 36px;
+ height: 36px;
+ cursor: pointer;
+ user-select: none;
+ pointer-events: auto;
+ background-size: 20px 20px;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+.element-action .item:hover {
+ background-color: #fff;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// .handle types
+////////////////////////////////////////////////////////////////////////////////
+.item.clone,
+.item.link,
+.item.fork,
+.item.rotate {cursor: move;}
+
+.item.resize {cursor: se-resize;}
\ No newline at end of file
diff --git a/app/sass/print.scss b/app/sass/print.scss
index 8ae942da..ce44e75e 100644
--- a/app/sass/print.scss
+++ b/app/sass/print.scss
@@ -3,9 +3,9 @@
////////////////////////////////////////////////////////////////////////////
// Hide not relevant interface when printing
////////////////////////////////////////////////////////////////////////////
- .stencil,
+ .elements-list,
.main-header,
- .stencil-list,
+ .elements-holder,
.workspace-header,
.model-properties {
display: none;
@@ -19,12 +19,12 @@
}
.mainContent,
- .paper-scroller {
+ .editor-scroller {
padding: 0 !important;
margin: 0 !important;
}
- .paper-scroller .joint-paper {
+ .editor-scroller .joint-paper {
position: static;
height: 100vh;
border-color: transparent;
diff --git a/app/sass/structure.scss b/app/sass/structure.scss
index 60731bb1..9a57b334 100644
--- a/app/sass/structure.scss
+++ b/app/sass/structure.scss
@@ -61,9 +61,9 @@ a,
}
////////////////////////////////////////////////////////////////////////////////
-// .stencil-lis
+// .element-holder
////////////////////////////////////////////////////////////////////////////////
-.stencil-list {
+.elements-holder {
position: fixed;
top: 50px;
bottom: 0;
@@ -74,17 +74,24 @@ a,
user-select: none;
}
-.stencil-list .stencil {
+.elements-holder .elements-list {
float: none;
width: 125px;
margin: 16px auto 0 auto;
border: none;
}
-.stencil-list .stencil .elements {
+.elements-holder .elements-list .elements {
background-color: transparent;
}
+////////////////////////////////////////////////////////////////////////////////
+// .stencil-paper-drag
+////////////////////////////////////////////////////////////////////////////////
+.draggable-paper.dragging {
+ opacity: .7;
+ }
+
////////////////////////////////////////////////////////////////////////////////
// .model-area
////////////////////////////////////////////////////////////////////////////////
@@ -201,30 +208,30 @@ a,
}
////////////////////////////////////////////////////////////////////////////////
-// .paper-scroller
+// .editor-scroller
////////////////////////////////////////////////////////////////////////////////
-.paper-scroller {
+.editor-scroller {
position: relative;
width: 100%;
height: 100%;
overflow: scroll;
}
-.paper-scroller .joint-paper {
+.editor-scroller .joint-paper {
position: absolute;
border: 1px solid #e7e7e7;
box-shadow: 0 0 20px rgba(0,0,0, 0.1);
// background-color: purple; // Uncomment to debugging purposes
}
-.paper-scroller .joint-paper > svg {
+.editor-scroller .joint-paper > svg {
display: block;
}
-.paper-scroller[data-cursor=grab] {
+.editor-scroller[data-cursor=grab] {
cursor: grab;
}
-.paper-scroller[data-cursor=grab].is-panning {
+.editor-scroller[data-cursor=grab].is-panning {
cursor: grabbing;
}
diff --git a/cypress/integration/api/model.spec.js b/cypress/integration/api/model.spec.js
index 39814f61..a1594adf 100644
--- a/cypress/integration/api/model.spec.js
+++ b/cypress/integration/api/model.spec.js
@@ -21,11 +21,11 @@ describe("Models - Creation via API call", () => {
cy.reload();
cy.contains("td", "Conceptual").click();
- cy.get(".paper-scroller [data-type='erd.Entity']").should("have.length", 2);
- cy.get(".paper-scroller [data-type='erd.Relationship']").should(
+ cy.get(".editor-scroller [data-type='erd.Entity']").should("have.length", 2);
+ cy.get(".editor-scroller [data-type='erd.Relationship']").should(
"have.length",
1
);
- cy.get(".paper-scroller [data-type='erd.Link']").should("have.length", 2);
+ cy.get(".editor-scroller [data-type='erd.Link']").should("have.length", 2);
});
});
diff --git a/cypress/integration/model.spec.js b/cypress/integration/model.spec.js
index fdd41d4b..78d7c34e 100644
--- a/cypress/integration/model.spec.js
+++ b/cypress/integration/model.spec.js
@@ -45,9 +45,9 @@ describe("Model", () => {
// Adds two tables, connects them, and save
cy.dragAndDropTableAt(200, 200);
cy.dragAndDropTableAt(500, 200);
- cy.get(".paper-scroller .joint-type-uml-class").first().click();
+ cy.get(".editor-scroller .joint-type-uml-class").first().click();
cy.get(".link").drag(
- ".paper-scroller .joint-type-uml-class:nth-child(2)"
+ ".editor-scroller .joint-type-uml-class:nth-child(2)"
);
cy.contains("a", "Save").click();
// Asserts the success message is displayed
@@ -57,7 +57,7 @@ describe("Model", () => {
// Reloads the page so that the success message disapears
cy.reload();
// Asserts the tables and connection are still there
- cy.get(".paper-scroller .joint-type-uml-class").should("have.length", 2);
+ cy.get(".editor-scroller .joint-type-uml-class").should("have.length", 2);
cy.get(".connection-wrap").should("have.length", 1);
});
});
diff --git a/package.json b/package.json
index 93848446..940579f4 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
"dotenv": "^10.0.0",
"errorhandler": "^1.5.1",
"express": "^4.17.1",
- "express-fileupload": "^1.2.1",
+ "express-fileupload": "^1.4.0",
"express-session": "^1.17.1",
"font-awesome": "^4.7.0",
"form-data": "^4.0.0",
@@ -110,7 +110,7 @@
"url-loader": "^4.1.1",
"webpack": "5.65.0",
"webpack-cli": "^4.9.1",
- "webpack-dev-server": "^4.6.0"
+ "webpack-dev-server": "^4.9.2"
},
"resolutions": {
"styled-components": "^5"
diff --git a/yarn.lock b/yarn.lock
index 12118c43..f54295b1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1278,6 +1278,11 @@
"@types/yargs" "^16.0.0"
chalk "^4.0.0"
+"@leichtgewicht/ip-codec@^2.0.1":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
+ integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -1433,7 +1438,7 @@
"@types/qs" "*"
"@types/range-parser" "*"
-"@types/express@*":
+"@types/express@*", "@types/express@^4.17.13":
version "4.17.13"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
@@ -1463,10 +1468,10 @@
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
-"@types/http-proxy@^1.17.5":
- version "1.17.8"
- resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55"
- integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==
+"@types/http-proxy@^1.17.8":
+ version "1.17.9"
+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a"
+ integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==
dependencies:
"@types/node" "*"
@@ -1577,7 +1582,7 @@
dependencies:
"@types/express" "*"
-"@types/serve-static@*":
+"@types/serve-static@*", "@types/serve-static@^1.13.10":
version "1.13.10"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9"
integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==
@@ -1629,10 +1634,10 @@
"@types/node" "*"
"@types/webidl-conversions" "*"
-"@types/ws@^8.2.2":
- version "8.2.2"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.2.2.tgz#7c5be4decb19500ae6b3d563043cd407bf366c21"
- integrity sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==
+"@types/ws@^8.5.1":
+ version "8.5.3"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d"
+ integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==
dependencies:
"@types/node" "*"
@@ -1910,6 +1915,14 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
+accepts@~1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+ integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+ dependencies:
+ mime-types "~2.1.34"
+ negotiator "0.6.3"
+
acorn-globals@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
@@ -2060,11 +2073,6 @@ ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -2114,7 +2122,7 @@ array-flatten@1.1.1:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-array-flatten@^2.1.0:
+array-flatten@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
@@ -2170,13 +2178,6 @@ astral-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
-async@^2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
- integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
- dependencies:
- lodash "^4.17.14"
-
async@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd"
@@ -2417,17 +2418,33 @@ body-parser@1.19.1, body-parser@^1.19.0:
raw-body "2.4.2"
type-is "~1.6.18"
-bonjour@^3.5.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
- integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
+body-parser@1.20.0:
+ version "1.20.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5"
+ integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==
dependencies:
- array-flatten "^2.1.0"
- deep-equal "^1.0.1"
+ bytes "3.1.2"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ on-finished "2.4.1"
+ qs "6.10.3"
+ raw-body "2.5.1"
+ type-is "~1.6.18"
+ unpipe "1.0.0"
+
+bonjour-service@^1.0.11:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1"
+ integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==
+ dependencies:
+ array-flatten "^2.1.2"
dns-equal "^1.0.0"
- dns-txt "^2.0.2"
- multicast-dns "^6.0.1"
- multicast-dns-service-types "^1.1.0"
+ fast-deep-equal "^3.1.3"
+ multicast-dns "^7.2.5"
boolbase@^1.0.0:
version "1.0.0"
@@ -2508,11 +2525,6 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-buffer-indexof@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
- integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
-
buffer@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
@@ -2521,12 +2533,12 @@ buffer@^5.6.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
-busboy@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
- integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==
+busboy@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
+ integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
dependencies:
- dicer "0.3.0"
+ streamsearch "^1.1.0"
bytes@3.0.0:
version "3.0.0"
@@ -2538,6 +2550,11 @@ bytes@3.1.1:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a"
integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
cacheable-request@^6.0.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
@@ -2654,6 +2671,21 @@ check-more-types@^2.24.0:
optionalDependencies:
fsevents "~2.3.2"
+chokidar@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
@@ -2913,6 +2945,11 @@ cookie@0.4.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
+cookie@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+ integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
cookiejar@^2.1.2:
version "2.1.3"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc"
@@ -3212,7 +3249,7 @@ debug@4, debug@4.x, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:
dependencies:
ms "2.1.2"
-debug@^3.1.0, debug@^3.1.1, debug@^3.2.7:
+debug@^3.1.0, debug@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
@@ -3236,18 +3273,6 @@ dedent@^0.7.0:
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
-deep-equal@^1.0.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
- integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
- dependencies:
- is-arguments "^1.0.4"
- is-date-object "^1.0.1"
- is-regex "^1.0.4"
- object-is "^1.0.1"
- object-keys "^1.1.1"
- regexp.prototype.flags "^1.2.0"
-
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
@@ -3287,20 +3312,6 @@ define-properties@^1.1.3:
dependencies:
object-keys "^1.0.12"
-del@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952"
- integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==
- dependencies:
- globby "^11.0.1"
- graceful-fs "^4.2.4"
- is-glob "^4.0.1"
- is-path-cwd "^2.2.0"
- is-path-inside "^3.0.2"
- p-map "^4.0.0"
- rimraf "^3.0.2"
- slash "^3.0.0"
-
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -3311,15 +3322,20 @@ denque@^2.0.1:
resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a"
integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==
+depd@2.0.0, depd@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
depd@~1.1.0, depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-depd@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
- integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+destroy@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+ integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
destroy@~1.0.4:
version "1.0.4"
@@ -3336,13 +3352,6 @@ detect-node@^2.0.4:
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-dicer@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
- integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==
- dependencies:
- streamsearch "0.1.2"
-
diff-sequences@^27.4.0:
version "27.4.0"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5"
@@ -3360,20 +3369,12 @@ dns-equal@^1.0.0:
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
-dns-packet@^1.3.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
- integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
+dns-packet@^5.2.2:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
+ integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==
dependencies:
- ip "^1.1.0"
- safe-buffer "^5.0.1"
-
-dns-txt@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
- integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
- dependencies:
- buffer-indexof "^1.0.0"
+ "@leichtgewicht/ip-codec" "^2.0.1"
doctrine@^2.1.0:
version "2.1.0"
@@ -3964,12 +3965,12 @@ expect@^27.4.2:
jest-message-util "^27.4.2"
jest-regex-util "^27.4.0"
-express-fileupload@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.2.1.tgz#73ac798bd14247d510adb1e439af2420c8367ded"
- integrity sha512-fWPNAkBj+Azt9Itmcz/Reqdg3LeBfaXptDEev2JM8bCC0yDptglCnlizhf0YZauyU5X/g6v7v4Xxqhg8tmEfEA==
+express-fileupload@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.4.0.tgz#be9d70a881d6c2b1ce668df86e4f89ddbf238ec7"
+ integrity sha512-RjzLCHxkv3umDeZKeFeMg8w7qe0V09w3B7oGZprr/oO2H/ISCgNzuqzn7gV3HRWb37GjRk429CCpSLS2KNTqMQ==
dependencies:
- busboy "^0.3.1"
+ busboy "^1.6.0"
express-session@^1.17.1:
version "1.17.2"
@@ -4021,6 +4022,43 @@ express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
+express@^4.17.3:
+ version "4.18.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf"
+ integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==
+ dependencies:
+ accepts "~1.3.8"
+ array-flatten "1.1.1"
+ body-parser "1.20.0"
+ content-disposition "0.5.4"
+ content-type "~1.0.4"
+ cookie "0.5.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "2.0.0"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "1.2.0"
+ fresh "0.5.2"
+ http-errors "2.0.0"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "2.4.1"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.7"
+ qs "6.10.3"
+ range-parser "~1.2.1"
+ safe-buffer "5.2.1"
+ send "0.18.0"
+ serve-static "1.15.0"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@@ -4155,6 +4193,19 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
+finalhandler@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+ integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "2.4.1"
+ parseurl "~1.3.3"
+ statuses "2.0.1"
+ unpipe "~1.0.0"
+
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
@@ -4222,9 +4273,9 @@ flatted@^3.1.0:
integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==
follow-redirects@^1.0.0:
- version "1.14.6"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd"
- integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==
+ version "1.14.8"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
+ integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
font-awesome@^4.7.0:
version "4.7.0"
@@ -4293,7 +4344,7 @@ fs-extra@^9.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-monkey@1.0.3:
+fs-monkey@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
@@ -4433,7 +4484,7 @@ globals@^13.6.0, globals@^13.9.0:
dependencies:
type-fest "^0.20.2"
-globby@^11.0.1, globby@^11.0.4:
+globby@^11.0.4:
version "11.0.4"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==
@@ -4639,6 +4690,17 @@ http-errors@1.8.1:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.1"
+http-errors@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+ integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+ dependencies:
+ depd "2.0.0"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ toidentifier "1.0.1"
+
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
@@ -4663,12 +4725,12 @@ http-proxy-agent@^4.0.1:
agent-base "6"
debug "4"
-http-proxy-middleware@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz#7ef3417a479fb7666a571e09966c66a39bd2c15f"
- integrity sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==
+http-proxy-middleware@^2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
+ integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
dependencies:
- "@types/http-proxy" "^1.17.5"
+ "@types/http-proxy" "^1.17.8"
http-proxy "^1.18.1"
is-glob "^4.0.1"
is-plain-obj "^3.0.0"
@@ -4834,11 +4896,6 @@ interpret@^2.2.0:
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
-ip@^1.1.0:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
- integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-
ipaddr.js@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
@@ -4849,14 +4906,6 @@ ipaddr.js@^2.0.1:
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
-is-arguments@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
- integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -4979,11 +5028,6 @@ is-obj@^2.0.0:
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
-is-path-cwd@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
- integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
-
is-path-inside@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
@@ -5006,7 +5050,7 @@ is-potential-custom-element-name@^1.0.1:
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
-is-regex@^1.0.4, is-regex@^1.1.4:
+is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
@@ -5893,7 +5937,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0, lodash@~4.17.21:
+lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0, lodash@~4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -5993,12 +6037,12 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-memfs@^3.2.2:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.0.tgz#8bc12062b973be6b295d4340595736a656f0a257"
- integrity sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==
+memfs@^3.4.3:
+ version "3.4.6"
+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.6.tgz#74097983d27c82b973665885dc75f27a65174510"
+ integrity sha512-rH9mjopto6Wkr7RFuH9l9dk3qb2XGOcYKr7xMhaYqfzuJqOqhRrcFvfD7JMuPj6SLmPreh5+6eAuv36NFAU+Mw==
dependencies:
- fs-monkey "1.0.3"
+ fs-monkey "^1.0.3"
memory-fs@^0.5.0:
version "0.5.0"
@@ -6046,6 +6090,11 @@ mime-db@1.51.0, "mime-db@>= 1.43.0 < 2":
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
version "2.1.34"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
@@ -6053,6 +6102,13 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17,
dependencies:
mime-db "1.51.0"
+mime-types@~2.1.34:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
mime@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
@@ -6093,16 +6149,9 @@ minimatch@^3.0.4:
brace-expansion "^1.1.7"
minimist@^1.2.0, minimist@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-
-mkdirp@^0.5.5:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
- dependencies:
- minimist "^1.2.5"
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+ integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
mongodb-connection-string-url@^2.3.2:
version "2.4.1"
@@ -6178,23 +6227,18 @@ ms@2.1.3, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-multicast-dns-service-types@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
- integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
-
-multicast-dns@^6.0.1:
- version "6.2.3"
- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
- integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+multicast-dns@^7.2.5:
+ version "7.2.5"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
+ integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
dependencies:
- dns-packet "^1.3.1"
+ dns-packet "^5.2.2"
thunky "^1.0.2"
nanoid@^3.1.30:
- version "3.1.30"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362"
- integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
+ integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
natural-compare@^1.4.0:
version "1.4.0"
@@ -6206,6 +6250,11 @@ negotiator@0.6.2:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+negotiator@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+ integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
@@ -6245,10 +6294,10 @@ node-fetch@3.0.0-beta.9:
data-uri-to-buffer "^3.0.1"
fetch-blob "^2.1.1"
-node-forge@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
- integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
+node-forge@^1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
+ integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
node-int64@^0.4.0:
version "0.4.0"
@@ -6332,14 +6381,6 @@ object-inspect@^1.11.0, object-inspect@^1.9.0:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
-object-is@^1.0.1:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
- integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
-
object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
@@ -6409,6 +6450,13 @@ oclazyload@^1.1.0:
resolved "https://registry.yarnpkg.com/oclazyload/-/oclazyload-1.1.0.tgz#a9807322f190820a81c022f2ef1701d036d83e87"
integrity sha1-qYBzIvGQggqBwCLy7xcB0DbYPoc=
+on-finished@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+ integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
+ dependencies:
+ ee-first "1.1.1"
+
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -6687,15 +6735,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
-portfinder@^1.0.28:
- version "1.0.28"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
- integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==
- dependencies:
- async "^2.6.2"
- debug "^3.1.1"
- mkdirp "^0.5.5"
-
postcss-calc@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.0.0.tgz#a05b87aacd132740a5db09462a3612453e5df90a"
@@ -7088,6 +7127,13 @@ pupa@^2.1.1:
dependencies:
escape-goat "^2.0.0"
+qs@6.10.3:
+ version "6.10.3"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
+ integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==
+ dependencies:
+ side-channel "^1.0.4"
+
qs@6.9.6:
version "6.9.6"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee"
@@ -7147,6 +7193,16 @@ raw-body@2.4.2, raw-body@^2.4.1:
iconv-lite "0.4.24"
unpipe "1.0.0"
+raw-body@2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
+ integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
raw-loader@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
@@ -7276,7 +7332,7 @@ regexp-clone@1.0.0, regexp-clone@^1.0.0:
resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63"
integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==
-regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1:
+regexp.prototype.flags@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
@@ -7549,12 +7605,12 @@ select-hose@^2.0.0:
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
-selfsigned@^1.10.11:
- version "1.10.11"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9"
- integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==
+selfsigned@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56"
+ integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==
dependencies:
- node-forge "^0.10.0"
+ node-forge "^1"
semver-diff@^3.1.1:
version "3.1.1"
@@ -7604,6 +7660,25 @@ send@0.17.2:
range-parser "~1.2.1"
statuses "~1.5.0"
+send@0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+ integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+ dependencies:
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "2.0.0"
+ mime "1.6.0"
+ ms "2.1.3"
+ on-finished "2.4.1"
+ range-parser "~1.2.1"
+ statuses "2.0.1"
+
serialize-javascript@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
@@ -7634,6 +7709,16 @@ serve-static@1.14.2:
parseurl "~1.3.3"
send "0.17.2"
+serve-static@1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+ integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.18.0"
+
setprototypeof@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
@@ -7725,7 +7810,7 @@ sliced@1.0.1:
resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
-sockjs@^0.3.21:
+sockjs@^0.3.24:
version "0.3.24"
resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
@@ -7824,15 +7909,20 @@ stack-utils@^2.0.3:
dependencies:
escape-string-regexp "^2.0.0"
+statuses@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-streamsearch@0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
- integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
+streamsearch@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
+ integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
string-length@^4.0.1:
version "4.0.2"
@@ -7902,13 +7992,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^7.0.0:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2"
- integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
- dependencies:
- ansi-regex "^6.0.1"
-
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
@@ -8571,52 +8654,51 @@ webpack-cli@^4.9.1:
rechoir "^0.7.0"
webpack-merge "^5.7.3"
-webpack-dev-middleware@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz#8fc02dba6e72e1d373eca361623d84610f27be7c"
- integrity sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==
+webpack-dev-middleware@^5.3.1:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f"
+ integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==
dependencies:
colorette "^2.0.10"
- memfs "^3.2.2"
+ memfs "^3.4.3"
mime-types "^2.1.31"
range-parser "^1.2.1"
schema-utils "^4.0.0"
-webpack-dev-server@^4.6.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.7.0.tgz#658aae4902dc920e90dbb8ad8b4eaf6491ac33af"
- integrity sha512-ldR+a54iygMxUawTzMlWD/JblePhNRVGHxTHQz9EAvsbH7HZbX53OxV6Y092x+tgN5umv885i2X4wfdo/ynEQA==
+webpack-dev-server@^4.9.2:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc"
+ integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q==
dependencies:
"@types/bonjour" "^3.5.9"
"@types/connect-history-api-fallback" "^1.3.5"
+ "@types/express" "^4.17.13"
"@types/serve-index" "^1.9.1"
+ "@types/serve-static" "^1.13.10"
"@types/sockjs" "^0.3.33"
- "@types/ws" "^8.2.2"
+ "@types/ws" "^8.5.1"
ansi-html-community "^0.0.8"
- bonjour "^3.5.0"
- chokidar "^3.5.2"
+ bonjour-service "^1.0.11"
+ chokidar "^3.5.3"
colorette "^2.0.10"
compression "^1.7.4"
connect-history-api-fallback "^1.6.0"
default-gateway "^6.0.3"
- del "^6.0.0"
- express "^4.17.1"
+ express "^4.17.3"
graceful-fs "^4.2.6"
html-entities "^2.3.2"
- http-proxy-middleware "^2.0.0"
+ http-proxy-middleware "^2.0.3"
ipaddr.js "^2.0.1"
open "^8.0.9"
p-retry "^4.5.0"
- portfinder "^1.0.28"
+ rimraf "^3.0.2"
schema-utils "^4.0.0"
- selfsigned "^1.10.11"
+ selfsigned "^2.0.1"
serve-index "^1.9.1"
- sockjs "^0.3.21"
+ sockjs "^0.3.24"
spdy "^4.0.2"
- strip-ansi "^7.0.0"
- url "^0.11.0"
- webpack-dev-middleware "^5.3.0"
- ws "^8.1.0"
+ webpack-dev-middleware "^5.3.1"
+ ws "^8.4.2"
webpack-merge@^5.4.0, webpack-merge@^5.7.3:
version "5.8.0"
@@ -8777,10 +8859,10 @@ ws@^7.4.6:
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
-ws@^8.1.0:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.4.0.tgz#f05e982a0a88c604080e8581576e2a063802bed6"
- integrity sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==
+ws@^8.4.2:
+ version "8.8.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769"
+ integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==
xdg-basedir@^4.0.0:
version "4.0.0"