diff --git a/Dockerfile b/Dockerfile
index fc11b98..a49d2df 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:10-alpine3.11
+FROM node:16-alpine3.11
WORKDIR /app
diff --git a/helpers/importer.js b/helpers/importer.js
index 4d50946..e2ceae2 100644
--- a/helpers/importer.js
+++ b/helpers/importer.js
@@ -8,7 +8,8 @@ const path = require('path')
const db = require('../models/db')
const Sequelize = require('sequelize')
const Op = Sequelize.Op
-const uuidv4 = require('uuid/v4')
+const { v4: uuidv4 } = require('uuid');
+
require('../models/db')
diff --git a/locales/en.js b/locales/en.js
index a8c7062..98456f7 100644
--- a/locales/en.js
+++ b/locales/en.js
@@ -199,6 +199,7 @@
"tool_scribble": "Scribble",
"tool_line": "Line",
"tool_arrow": "Arrow",
+ "tool_pan": "Pan",
"search_media_placeholder": "Search web media…",
"add_zone": "New Zone",
"palette": "Palette",
@@ -329,4 +330,4 @@
"tool_space_help_part_one": "Use the toolbar to add content.",
"tool_space_help_part_two": "You can also drop images or sound and video files.",
"tool_delete_space": "Really delete \"%s\"?"
-}
+}
\ No newline at end of file
diff --git a/public/javascripts/spacedeck_sections.js b/public/javascripts/spacedeck_sections.js
index 6758a8c..b980698 100644
--- a/public/javascripts/spacedeck_sections.js
+++ b/public/javascripts/spacedeck_sections.js
@@ -2562,6 +2562,17 @@ var SpacedeckSections = {
this.opened_dialog = "none";
},
+ start_pan: function(evt) {
+ this.deselect();
+ if (this.active_tool == "pan") {
+ this.active_tool = "pointer";
+ } else {
+ this.active_tool = "pan";
+ }
+ this.opened_dialog = "none";
+
+ },
+
start_drawing_scribble: function(evt) {
this.deselect();
if (this.active_tool == "scribble") {
diff --git a/public/javascripts/spacedeck_whiteboard.js b/public/javascripts/spacedeck_whiteboard.js
index fca43f0..f2f8325 100644
--- a/public/javascripts/spacedeck_whiteboard.js
+++ b/public/javascripts/spacedeck_whiteboard.js
@@ -733,7 +733,7 @@ function setup_whiteboard_directives() {
return;
}
- if (_.include(["zoom", "scribble"], $scope.active_tool)) {
+ if (_.include(["zoom", "scribble", "pan"], $scope.active_tool)) {
// tools that stay active after use
this.mouse_state = "idle";
$scope.mouse_state = this.mouse_state;
diff --git a/routes/api/memberships.js b/routes/api/memberships.js
index f25cd1d..725ce2c 100644
--- a/routes/api/memberships.js
+++ b/routes/api/memberships.js
@@ -14,7 +14,7 @@ var router = express.Router();
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
-const uuidv4 = require('uuid/v4');
+const { v4: uuidv4 } = require('uuid');
router.get('/:membership_id/accept', function(req, res, next) {
if (req.user) {
diff --git a/routes/api/space_artifacts.js b/routes/api/space_artifacts.js
index 699d26b..5e5e122 100644
--- a/routes/api/space_artifacts.js
+++ b/routes/api/space_artifacts.js
@@ -6,7 +6,7 @@ const os = require('os');
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
-const uuidv4 = require('uuid/v4');
+const { v4: uuidv4 } = require('uuid');
var payloadConverter = require('../../helpers/artifact_converter');
var redis = require('../../helpers/redis');
diff --git a/routes/api/space_memberships.js b/routes/api/space_memberships.js
index 8eed84a..517a4ed 100644
--- a/routes/api/space_memberships.js
+++ b/routes/api/space_memberships.js
@@ -3,7 +3,7 @@ var config = require('config');
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
-const uuidv4 = require('uuid/v4');
+const { v4: uuidv4 } = require('uuid');
var redis = require('../../helpers/redis');
var mailer = require('../../helpers/mailer');
diff --git a/routes/api/space_messages.js b/routes/api/space_messages.js
index 5bcfdc1..d42c9a1 100644
--- a/routes/api/space_messages.js
+++ b/routes/api/space_messages.js
@@ -3,7 +3,7 @@ var config = require('config');
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
-const uuidv4 = require('uuid/v4');
+const { v4: uuidv4 } = require('uuid');
var redis = require('../../helpers/redis');
var mailer = require('../../helpers/mailer');
diff --git a/routes/root.js b/routes/root.js
index 02a124d..01d3e20 100644
--- a/routes/root.js
+++ b/routes/root.js
@@ -12,7 +12,7 @@ const _ = require('underscore');
const db = require('../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
-const uuidv4 = require('uuid/v4');
+const { v4: uuidv4 } = require('uuid');
router.get('/', (req, res) => {
res.render('index', { config:config, user:req.user });
diff --git a/views/partials/tool/toolbar-elements.html b/views/partials/tool/toolbar-elements.html
index 646c56a..7fbb258 100644
--- a/views/partials/tool/toolbar-elements.html
+++ b/views/partials/tool/toolbar-elements.html
@@ -18,6 +18,11 @@
+
+
">