5 Commits

Author SHA1 Message Date
Lukas F. Hartmann
a5914ab600 bump to node 18; remove audiowaveform build from dockerfile 2023-09-21 20:58:24 +02:00
Lukas F. Hartmann
1d7a014fd4 Merge branch 'LumberjackOtters-mnt' into mnt 2023-09-21 20:44:11 +02:00
Lukas F. Hartmann
43577337aa update code for sequelize upgrade 2023-09-21 20:40:03 +02:00
PurpleBabar
eb9c767afc feat: dockerfile update 2023-09-20 18:49:39 +02:00
PurpleBabar
cf8902f3c5 feat: move to node v16 and adding a pan tool 2023-09-20 18:27:34 +02:00
19 changed files with 17099 additions and 3103 deletions

View File

@@ -1,26 +1,7 @@
FROM node:10-alpine3.11
FROM node:18-alpine
WORKDIR /app
# build audiowaveform from source
RUN apk add git make cmake gcc g++ libmad-dev libid3tag-dev libsndfile-dev gd-dev boost-dev libgd libpng-dev zlib-dev opus-dev
RUN apk add zlib-static libpng-static boost-static
RUN apk add autoconf automake libtool gettext
RUN wget https://github.com/xiph/flac/archive/1.3.3.tar.gz
RUN tar xzf 1.3.3.tar.gz
RUN cd flac-1.3.3/ && ./autogen.sh
RUN cd flac-1.3.3/ && ./configure --enable-shared=no
RUN cd flac-1.3.3/ && make
RUN cd flac-1.3.3/ && make install
RUN git clone https://github.com/bbc/audiowaveform.git
RUN mkdir audiowaveform/build/
RUN cd audiowaveform/build/ && cmake -D ENABLE_TESTS=0 -D BUILD_STATIC=1 ..
RUN cd audiowaveform/build/ && make
RUN cd audiowaveform/build/ && make install
# install chromium
RUN apk add --no-cache \
chromium \

View File

@@ -31,7 +31,7 @@ We appreciate filed issues, pull requests and general discussion.
Spacedeck requires:
- Node.js 10.x: Web Server / API. Download: https://nodejs.org
- Node.js 18.x: Web Server / API. Download: https://nodejs.org
- Graphicsmagick. On non-Linux, Download: http://www.graphicsmagick.org/ On Linux, install via package manager.
- Optionally ffmpeg, audiowaveform and ghostscript. See "Optional Dependencies" below.

View File

@@ -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')

View File

@@ -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",

View File

@@ -61,7 +61,7 @@ module.exports = (req, res, next) => {
}
});
})
.error((err) => {
.catch((err) => {
console.error("Session resolve error", err);
next();
});

15164
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,47 +11,47 @@
"node": ">=10.0.0"
},
"dependencies": {
"archiver": "1.3.0",
"async": "2.3.0",
"archiver": "5.3.1",
"async": "3.2.4",
"bcryptjs": "2.4.3",
"body-parser": "^1.19.0",
"cheerio": "0.22.0",
"config": "1.25.1",
"cheerio": "1.0.0-rc.12",
"config": "3.3.9",
"cookie-parser": "~1.4.3",
"ejs": "3.1.5",
"ejs": "3.1.9",
"execSync": "latest",
"express": "^4.16.4",
"file-type": "^7.6.0",
"glob": "7.1.1",
"file-type": "^16.5.0",
"glob": "10.3.3",
"gm": "^1.23.1",
"helmet": "^3.5.0",
"i18n-2": "0.6.3",
"helmet": "^7.0.0",
"i18n-2": "0.7.3",
"log-timestamp": "latest",
"mock-aws-s3": "^4.0.2",
"moment": "^2.19.3",
"morgan": "^1.9.1",
"nodemailer": "^6.6.0",
"puppeteer": "8.0.0",
"read-chunk": "^2.1.0",
"puppeteer": "^18",
"read-chunk": "^3",
"request": "^2.88.0",
"sanitize-html": "^2.3.3",
"sequelize": "^4.37.6",
"serve-favicon": "~2.4.2",
"sequelize": "^6.33.0",
"serve-favicon": "~2.5.0",
"serve-static": "^1.13.1",
"slug": "^1.1.0",
"sqlite3": "^4.2.0",
"umzug": "^2.1.0",
"slug": "^8.2.2",
"sqlite3": "5.*",
"umzug": "^2",
"underscore": "^1.13.1",
"uuid": "^3.2.1",
"validator": "7.0.0",
"ws": "5.2.3"
"uuid": "^9.0.0",
"validator": "13.9.0",
"ws": "8.13.0"
},
"devDependencies": {
"gulp": "^4.0.2",
"gulp-clean-css": "^4.3.0",
"gulp-concat": "^2.6.1",
"gulp-sass": "^4.0.2",
"nodemon": "^2.0.6"
"gulp-sass": "^5",
"nodemon": "^3.0.1"
},
"main": "app.js",
"description": "",

View File

@@ -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") {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -21,7 +21,7 @@ router.post('/', function(req, res) {
var password = req.body["password"];
db.User.findOne({where: {email: email}})
.error(err => {
.catch(err => {
res.sendStatus(404);
})
.then(user => {
@@ -41,7 +41,7 @@ router.post('/', function(req, res) {
};
db.Session.create(session)
.error(err => {
.catch(err => {
console.error("Error creating Session:",err);
res.sendStatus(500);
})

View File

@@ -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');

View File

@@ -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');

View File

@@ -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');

View File

@@ -4,7 +4,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 redis = require('../../helpers/redis');
var mailer = require('../../helpers/mailer');
@@ -188,8 +188,6 @@ router.post('/', function(req, res, next) {
attrs.access_mode = "private";
db.Space.create(attrs).then(createdSpace => {
res.status(201).json(createdSpace);
// create initial admin membership
var membership = {
_id: uuidv4(),

View File

@@ -2,7 +2,8 @@
var config = require('config');
const db = require('../../models/db');
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
const os = require('os');
var mailer = require('../../helpers/mailer');
@@ -84,7 +85,7 @@ router.post('/', function(req, res) {
};
db.User.create(u)
.error(err => {
.catch(err => {
res.sendStatus(400);
})
.then(u => {
@@ -95,7 +96,7 @@ router.post('/', function(req, res) {
creator_id: u._id
};
db.Space.create(homeFolder)
.error(err => {
.catch(err => {
res.sendStatus(400);
})
.then(homeFolder => {
@@ -114,7 +115,7 @@ router.post('/', function(req, res) {
});
res.status(201).json({});
})
.error(err => {
.catch(err => {
res.status(400).json(err);
});
})

View File

@@ -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 });

View File

@@ -18,6 +18,11 @@
<button class="btn btn-divider"></button>
<button class="btn btn-icon-labeled btn-transparent" v-on:click="start_pan()" v-bind:class="{active:active_tool=='pan'}" title="<%=__("tool_pan")%>">
<span class="icon icon-move"></span>
<span class="icon-label"><%=__("tool_pan")%></span>
</button>
<div class="dropdown top left light" v-bind:class="{open:opened_dialog=='shapes'}">
<div class="btn-collapse in" title="<%=__("tool_shape")%>">
<button class="btn btn-transparent btn-icon-labeled" v-bind:class="{open:opened_dialog=='shapes'}" v-on:click="open_dialog('shapes')">

4890
yarn.lock Normal file

File diff suppressed because it is too large Load Diff