Compare commits

...
57 Commits
Author SHA1 Message Date
Lauri Ojansivu 3908fe0ab8 v3.98 2020-04-25 16:44:45 +03:00
Lauri Ojansivu 5d2ff89e9b Update ChangeLog. 2020-04-25 15:26:46 +03:00
Lauri Ojansivu 7f38bc7b95 Merge pull request #3046 from marc1006/3041
Partially fixes https://github.com/wekan/wekan/issues/3041
2020-04-25 15:21:50 +03:00
Marc Hartmayer ed0c64a270 Allow words in title/description to be able to break and wrap onto the next line 2020-04-25 13:34:30 +02:00
Marc Hartmayer e63e7b1131 Allow variable height for board list items
This fixes https://github.com/wekan/wekan/issues/3041.
2020-04-25 13:34:30 +02:00
Lauri Ojansivu 3f7d9fd42c Update ChangeLog. 2020-04-25 14:23:29 +03:00
Lauri Ojansivu 867344f070 Update translations. 2020-04-25 14:19:26 +03:00
Lauri Ojansivu a84195179e Merge pull request #3045 from marc1006/mobile_followup
Follow-up for https://github.com/wekan/wekan/pull/3040
2020-04-25 14:15:58 +03:00
Marc Hartmayer f1b18d79cd Don't interpret dragging an element as a click
Remove `enableClickOnTouch` as this behavior is not intuitive.
2020-04-25 09:49:41 +02:00
Marc Hartmayer 6d1cdebfe2 Make it compatible with newer and older versions of jQuery sortable
While at it, fix comments and prettify it.
2020-04-25 09:49:10 +02:00
Lauri Ojansivu 7cf8487f57 Merge branch 'master' of github.com:wekan/wekan 2020-04-25 04:16:45 +03:00
Lauri Ojansivu 5403027c9d Update ChangeLog. 2020-04-25 04:16:29 +03:00
Lauri Ojansivu daf397a1ba Merge pull request #3044 from VictorioBerra/patch-1
Fix comment typo in docker-compose.yml
2020-04-25 04:11:07 +03:00
Lauri Ojansivu 6104c1711f Update translations. 2020-04-25 03:58:48 +03:00
Lauri Ojansivu db41e41d90 Update ChangeLog. 2020-04-25 03:53:16 +03:00
Lauri Ojansivu 1235363465 Fix Wekan not load at all in Firefox v.68 for Android.
Thanks to xet7 !

Closes #3021
2020-04-25 03:47:44 +03:00
Lauri Ojansivu 7263d7497f Merge branch 'marc1006-mobile' 2020-04-25 01:41:37 +03:00
Lauri Ojansivu 666186fee8 Merge branch 'mobile' of https://github.com/marc1006/wekan into marc1006-mobile 2020-04-25 01:41:04 +03:00
Victorio Berra 27d1b5acca Fix comment typo in docker-compose.yml
webbroser -> web browser.
2020-04-24 09:07:32 -05:00
Lauri Ojansivu 5eb5ca5752 Update translations. 2020-04-23 18:38:57 +03:00
Lauri Ojansivu 16d371b814 Update ChangeLog. 2020-04-23 14:21:06 +03:00
Lauri Ojansivu df9b4db49d Merge branch 'marc1006-one_apply' 2020-04-23 14:17:57 +03:00
Lauri Ojansivu 2e8e58004d Merge branch 'one_apply' of https://github.com/marc1006/wekan into marc1006-one_apply 2020-04-23 14:17:35 +03:00
Lauri Ojansivu a83aa6162b Update ChangeLog. 2020-04-23 14:16:27 +03:00
Lauri Ojansivu 07c915ccf0 Merge pull request #3038 from marc1006/fix
Fix getStartDayOfWeek function
2020-04-23 14:14:09 +03:00
Marc Hartmayer 405f176bbb Fix getStartDayOfWeek function
In case profile.startDayOfWeek is 0 it's evaluated to false and 1 is returned.
Let's fix this by differentiating between undefined and an actual value.
2020-04-23 10:40:53 +02:00
Marc Hartmayer 6476503137 Fix drag-and-drop and scrolling on mobile devices
Use drag handles on "miniscreens" whenever useful, this is especially useful on
mobile device. This should hopefully fix https://github.com/wekan/wekan/issues/2947.
While at it, simplify the condition

 Utils.isMiniScreen() ||
   (!Utils.isMiniScreen() && showDesktopDragHandles)

 to

  Utils.isMiniScreen() || showDesktopDragHandle
2020-04-23 03:02:03 +02:00
Marc Hartmayer 981ed546f1 Newer versions of jQuery sortable use uiSortable key
Newer versions of jQuery sortable use `uiSortable` as key to store the data.
Let's adapt the code. While at it, refactor the code.
2020-04-23 02:55:33 +02:00
Marc Hartmayer c1287248a6 Mobile device layout fix 2020-04-23 02:55:24 +02:00
Marc Hartmayer 52f884f2b1 Use only one 'Apply' button for applying the user settings 2020-04-23 00:20:16 +02:00
Lauri Ojansivu 4550e10fbe Revert Snap MongoDB changes.
Thanks to xet7 !
2020-04-22 22:43:20 +03:00
Lauri Ojansivu 2efe974195 Update ChangeLog. 2020-04-22 21:50:35 +03:00
Lauri Ojansivu 6b808dd74b Try to upgrade MongoDB version in Snap.
Thanks to xet7 !
2020-04-22 21:48:46 +03:00
Lauri Ojansivu 8a917e0efc Update ChangeLog. 2020-04-22 21:37:33 +03:00
Lauri Ojansivu d1f98d0c47 Upgrade to Meteor 1.10.2
Thanks to Meteor developers and xet7 !
2020-04-22 21:35:13 +03:00
Lauri Ojansivu 323de77a83 Update ChangeLog. 2020-04-22 21:29:53 +03:00
Lauri Ojansivu 738e7f9ebc Merge branch 'boeserwolf-feature-add-babel' 2020-04-22 21:26:06 +03:00
Lauri Ojansivu b5b4af73a9 Merge branch 'feature-add-babel' of https://github.com/boeserwolf/wekan into boeserwolf-feature-add-babel 2020-04-22 21:25:49 +03:00
Lauri Ojansivu ab1014b7d8 Update ChangeLog. 2020-04-22 21:24:13 +03:00
Lauri Ojansivu 12964aa742 Update translations. 2020-04-22 21:16:28 +03:00
Lauri Ojansivu e4b1106acd Update ChangeLog. 2020-04-22 21:07:49 +03:00
Lauri Ojansivu d0524532a4 Merge branch 'master' of github.com:wekan/wekan 2020-04-22 21:05:58 +03:00
Lauri Ojansivu 7de18eccea - Set Snap MongoDB compatibility to 4.2 according to Meteor ChangeLog.
Thanks to xet7 !
2020-04-22 21:05:34 +03:00
Lauri Ojansivu f9747bc908 - Set Snap MongoDB compatibility to 4.2.5 according to Meteor ChangeLog.
Thanks to xet7 !
2020-04-22 21:03:47 +03:00
Lauri Ojansivu 6fd827792a Update ChangeLog. 2020-04-22 21:03:01 +03:00
Lauri Ojansivu 9e95c06415 Fix lint errors in lint error fix.
Thanks to xet7 !
2020-04-22 21:00:31 +03:00
Lauri Ojansivu e7603298d7 Merge branch 'marc1006-week_start' 2020-04-22 20:36:28 +03:00
Marc Hartmayer 8e14459cff Implement option to change the first day of week in user settings
Implements #2535.
2020-04-22 19:16:05 +02:00
Marc Hartmayer 3ac5dba243 Set first day of the week to Monday 2020-04-22 19:12:34 +02:00
Lauri Ojansivu 9969c89b1c Update ChangeLog. 2020-04-22 20:09:07 +03:00
Lauri Ojansivu 5a5b19d4fc Merge pull request #3031 from marc1006/style_issues
Multiple lint issue fixes
2020-04-22 20:06:50 +03:00
Lauri Ojansivu 4d48fa4d95 Update ChangeLog. 2020-04-22 16:43:47 +03:00
boeserwolf 57545f66d2 Add babel to build chain and linter
Enables fancy Javascript language features like optional chaining,
for developer happiness.
2020-04-22 15:16:30 +02:00
Lauri Ojansivu 8586c843a4 Merge pull request #3030 from boeserwolf/master
Pre-fill the title of checklists (Trello-style)
2020-04-22 16:08:06 +03:00
Marc Hartmayer b2acc3ba45 Multiple lint issue fixes
Found by using the command `meteor npm run lint:eslint:fix`.
2020-04-21 18:15:29 +02:00
boeserwolf 9f0273aa44 Pre-fill the title of checklists (Trello-style) 2020-04-21 00:58:15 +03:00
Lauri Ojansivu 3407b0e65b Add links to FAQ. 2020-04-20 16:22:29 +03:00
95 changed files with 1822 additions and 3614 deletions

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
{
"presets": [
"@babel/preset-stage-3"
]
}
+1
View File
@@ -11,6 +11,7 @@
"browser": true,
"meteor": true
},
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
+257
View File
@@ -0,0 +1,257 @@
name: wekan
version: 0
version-script: git describe --tags | cut -c 2-
summary: The open-source kanban
description: |
Wekan is an open-source and collaborative kanban board application.
Whether you’re maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Depending on target environment, some configuration settings might need to be adjusted.
For full list of configuration options call:
$ wekan.help
confinement: strict
grade: stable
architectures:
- amd64
plugs:
mongodb-plug:
interface: content
target: $SNAP_DATA/shared
hooks:
configure:
plugs:
- network
- network-bind
slots:
mongodb-slot:
interface: content
write:
- $SNAP_DATA/share
apps:
wekan:
command: wekan-control
daemon: simple
plugs: [network, network-bind]
mongodb:
command: mongodb-control
daemon: simple
plugs: [network, network-bind]
caddy:
command: caddy-control
daemon: simple
plugs: [network, network-bind]
help:
command: wekan-help
database-backup:
command: mongodb-backup
plugs: [network, network-bind]
database-list-backups:
command: ls -al $SNAP_COMMON/db-backups/
database-restore:
command: mongodb-restore
plugs: [network, network-bind]
parts:
mongodb:
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.6.tgz
plugin: dump
stage-packages: [libssl1.0.0, libcurl3]
filesets:
mongo:
- usr
- bin
- lib
stage:
- $mongo
prime:
- $mongo
wekan:
source: .
plugin: nodejs
node-engine: 12.16.2
node-packages:
- node-gyp
- node-pre-gyp
- fibers
build-packages:
- ca-certificates
- apt-utils
- python
- python3
- g++
- capnproto
- curl
- libcurl3
- execstack
- nodejs
- npm
stage-packages:
- libfontconfig1
override-build: |
echo "Cleaning environment first"
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
# Create the OpenAPI specification
rm -rf .build
## Use Meteor 1.8.x on Snap
#rm -rf .meteor
#mv .snap-meteor-1.8/.meteor .
#mv .snap-meteor-1.8/package.json .
#mv .snap-meteor-1.8/package-lock.json .
## Meteor 1.9.x has changes to Buffer() => Buffer.alloc(), so reverting those
#mv .snap-meteor-1.8/cfs_access-point.txt fix-download-unicode/
#mv .snap-meteor-1.8/export.js models/
#mv .snap-meteor-1.8/wekanCreator.js models/
#mv .snap-meteor-1.8/ldap.js packages/wekan-ldap/server/ldap.js
#mv .snap-meteor-1.8/oidc_server.js packages/wekan-oidc/oidc_server.js
rm -rf .snap-meteor-1.8
#mkdir -p .build/python
#cd .build/python
#git clone --depth 1 -b master https://github.com/Kronuz/esprima-python
#cd esprima-python
#python3 setup.py install
#cd ../../..
#mkdir -p ./public/api
#python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml
# we temporary need api2html and mkdirp
#npm install -g api2html@0.3.0
#npm install -g mkdirp
#api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml
#npm uninstall -g mkdirp
#npm uninstall -g api2html
# Node Fibers 100% CPU usage issue:
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161
# https://github.com/meteor/meteor/issues/9796#issuecomment-381676326
# https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129
# Also see beginning of wekan/server/authentication.js
# import Fiber from "fibers";
# Fiber.poolSize = 1e9;
# OLD: Download node version 8.12.0 prerelease build => Official node 8.12.0 has been released
# Description at https://releases.wekan.team/node.txt
##echo "375bd8db50b9c692c0bbba6e96d4114cd29bee3770f901c1ff2249d1038f1348 node" >> node-SHASUMS256.txt.asc
##curl https://releases.wekan.team/node -o node
# Verify Fibers patched node authenticity
##echo "Fibers 100% CPU issue patched node authenticity:"
##grep node node-SHASUMS256.txt.asc | shasum -a 256 -c -
##rm -f node-SHASUMS256.txt.asc
##chmod +x node
##mv node `which node`
# DOES NOT WORK: paxctl fix.
# Removed from build-packages: - paxctl
#echo "Applying paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303"
#paxctl -mC `which node`
#echo "Installing npm"
#curl -L https://www.npmjs.com/install.sh | sh
echo "Installing meteor"
curl https://install.meteor.com/ -o install_meteor.sh
#sed -i "s|RELEASE=.*|RELEASE=\"1.8.1-beta.0\"|g" install_meteor.sh
chmod +x install_meteor.sh
sh install_meteor.sh
rm install_meteor.sh
# REPOS BELOW ARE INCLUDED TO WEKAN REPO
#if [ ! -d "packages" ]; then
# mkdir packages
#fi
#if [ ! -d "packages/kadira-flow-router" ]; then
# cd packages
# git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
# cd ..
#fi
#if [ ! -d "packages/meteor-useraccounts-core" ]; then
# cd packages
# git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
# sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' meteor-useraccounts-core/package.js
# cd ..
#fi
#if [ ! -d "packages/meteor-accounts-cas" ]; then
# cd packages
# git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git meteor-accounts-cas
# cd ..
#fi
#if [ ! -d "packages/wekan-ldap" ]; then
# cd packages
# git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
# cd ..
#fi
#if [ ! -d "packages/wekan-scrollbar" ]; then
# cd packages
# git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
# cd ..
#fi
#if [ ! -d "packages/wekan_accounts-oidc" ]; then
# cd packages
# git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
# mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan-accounts-oidc
# mv meteor-accounts-oidc/packages/switch_oidc wekan-oidc
# rm -rf meteor-accounts-oidc
# cd ..
#fi
#if [ ! -d "packages/markdown" ]; then
# cd packages
# git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git
# cd ..
#fi
rm -rf .build
meteor add standard-minifier-js --allow-superuser
meteor npm install --allow-superuser
meteor npm install --allow-superuser --save babel-runtime
meteor build .build --directory --allow-superuser
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
#cd .build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
#rm -rf node_modules/bcrypt
#meteor npm install --save bcrypt
# Change from npm-bcrypt directory back to .build/bundle/programs/server directory.
#cd ../../../../
# Change to directory .build/bundle/programs/server
cd .build/bundle/programs/server
npm install
npm install --allow-superuser --save babel-runtime
#meteor npm install --save bcrypt
# Change back to Wekan source directory
cd ../../../..
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp
# Meteor 1.8.x additional .swp remove
rm -f $SNAPCRAFT_PART_INSTALL/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
organize:
README: README.wekan
prime:
- -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp
helpers:
source: snap-src
plugin: dump
caddy:
plugin: dump
source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off
source-type: tar
organize:
caddy: bin/caddy
CHANGES.txt: CADDY_CHANGES.txt
EULA.txt: CADDY_EULA.txt
LICENSES.txt: CADDY_LICENSES.txt
README.txt: CADDY_README.txt
stage:
- -init
+3 -3
View File
@@ -6,7 +6,7 @@
meteor-base@1.4.0
# Build system
ecmascript@0.14.2
ecmascript@0.14.3
standard-minifier-css@1.6.0
standard-minifier-js@2.6.0
mquandalle:jade
@@ -23,7 +23,7 @@ dburles:collection-helpers
idmontie:migrations
matb33:collection-hooks
matteodem:easy-search
mongo@1.9.0
mongo@1.10.0
mquandalle:collection-mutations
# Account system
@@ -72,7 +72,7 @@ simple:rest-accounts-password
useraccounts:core
email@1.2.3
horka:swipebox
dynamic-import@0.5.1
dynamic-import@0.5.2
staringatlights:fast-render
accounts-password@1.6.0
+1 -1
View File
@@ -1 +1 @@
METEOR@1.10.1
METEOR@1.10.2
+5 -5
View File
@@ -104,13 +104,13 @@ meteorspark:util@0.2.0
minifier-css@1.5.0
minifier-js@2.6.0
minifiers@1.1.8-faster-rebuild.0
minimongo@1.5.0
minimongo@1.6.0
mobile-status-bar@1.1.0
modern-browsers@0.1.5
modules@0.15.0
modules-runtime@0.12.0
momentjs:moment@2.24.0
mongo@1.9.1
mongo@1.10.0
mongo-decimal@0.1.1
mongo-dev-server@1.1.0
mongo-id@1.0.7
@@ -162,11 +162,11 @@ simple:json-routes@2.1.0
simple:rest-accounts-password@1.1.2
simple:rest-bearer-token-parser@1.0.1
simple:rest-json-error-handler@1.0.1
socket-stream-client@0.2.3
socket-stream-client@0.3.0
softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
srp@1.0.12
srp@1.1.0
standard-minifier-css@1.6.0
standard-minifier-js@2.6.0
staringatlights:fast-render@3.2.0
@@ -181,7 +181,7 @@ tracker@1.2.0
twbs:bootstrap@3.3.6
ui@1.0.13
underscore@1.0.10
url@1.2.0
url@1.3.0
useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
useraccounts:unstyled@1.14.2
+53
View File
@@ -1,3 +1,56 @@
# v3.98 2020-04-25 Wekan release
News:
- There is now many mobile and desktop webbrowser fixes. Please test does your
favourite Javascript enabled webbrowser work, and add issues if something
does not work, and there is no existing issue about that yet.
- Desktop browser mode has setting for Show/Hide drag handles:
top right click username / Change Settings / Show desktop drag handles.
You can request desktop website also at mobile webbrowsers on Android.
At iOS requesting desktop website did not seem to work yet.
- At iOS Safari and Chrome, to see swimlane buttons you need to scroll to right.
Fixes to this and other issues are welcome as pull request.
This release adds the following new features:
- [Pre-fill the title of checklists (Trello-style)](https://github.com/wekan/wekan/pull/3030).
Thanks to boeserwolf.
- [Implement option to change the first day of the week in user settings](https://github.com/wekan/wekan/pull/3032).
Thanks to marc1006.
- [Add babel to build chain and linter. Enables fancy Javascript language
features like optional chaining, for developer happiness](https://github.com/wekan/wekan/pull/3034).
Thanks to boeserwolf.
- [Use only one 'Apply' button for applying the user settings](https://github.com/wekan/wekan/pull/3039).
Thanks to marc1006.
- [Allow variable height for board list items. Allow words in title/description to be able to break
and wrap onto the next line](https://github.com/wekan/wekan/pull/3046).
Thanks to marc1006.
and adds the following updates:
- [Upgrade to Meteor 1.10.2](https://github.com/wekan/wekan/commit/d1f98d0c472fb41e25fb29a9a6f6dae7db003f6f).
Thanks to Meteor developers and xet7.
- [Set Snap MongoDB compatibility to 4.2 according to Meteor ChangeLog](https://github.com/wekan/wekan/commit/7de18eccea3854db3be6197bf21afbfd3ddb65a6).
Thanks to xet7.
and fixes the following bugs:
- [Multiple lint issue fixes](https://github.com/wekan/wekan/pull/3031).
Thanks to marc1006.
- [Fix lint errors in lint error fix](https://github.com/wekan/wekan/commit/9e95c06415e614e587d684ff9660cc53c5f8c8d3).
Thanks to xet7.
- [Fix getStartDayOfWeek function](https://github.com/wekan/wekan/pull/3038).
Thanks to marc1006 and boeserwolf.
- Improve mobile devices support [Part1](https://github.com/wekan/wekan/pull/3040) and [Part2](https://github.com/wekan/wekan/pull/3045).
Thanks to marc1006.
- [Fix Wekan not load at all in Firefox v.68 for Android](https://github.com/wekan/wekan/commit/1235363465b824d26129d4aa74a4445f362c1a73).
Thanks to xet7.
- [Fix comment typo in docker-compose.yml](https://github.com/wekan/wekan/pull/3044).
Thanks to VictorioBerra.
Thanks to above GitHub users for their contributions and translators for their translations.
# v3.97 2020-04-19 Wekan release
This release adds the following new features:
+3 -1
View File
@@ -7,7 +7,7 @@ LABEL maintainer="wekan"
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
NODE_VERSION=v12.16.2 \
METEOR_RELEASE=1.10-rc.2 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
NPM_VERSION=latest \
@@ -271,6 +271,8 @@ RUN \
cd /home/wekan/app_build/bundle/programs/server/ && \
gosu wekan:wekan npm install && \
#gosu wekan:wekan npm install bcrypt && \
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy && \
mv /home/wekan/app_build/bundle /build && \
\
# Put back the original tar
+1 -1
View File
@@ -34,7 +34,7 @@ and PWA app that can be added as icon on Android and bookmark on iOS, used like
**NOTE**:
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
- Please don't feed the trolls and spammers that are mentioned in the FAQ :)
- Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
## About Wekan
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v3.97.0"
appVersion: "v3.98.0"
files:
userUploads:
- README.md
+1 -1
View File
@@ -7,7 +7,7 @@ BlazeComponent.extendComponent({
return Boards.find(
{ archived: true },
{
sort: { sort: 1 /* boards default sorting */ }
sort: { sort: 1 /* boards default sorting */ },
},
);
},
+3 -7
View File
@@ -1,7 +1,7 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const subManager = new SubsManager();
const { calculateIndex, enableClickOnTouch } = Utils;
const { calculateIndex } = Utils;
const swimlaneWhileSortingHeight = 150;
BlazeComponent.extendComponent({
@@ -191,9 +191,6 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-swimlane:not(.placeholder)');
this.autorun(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
@@ -205,7 +202,7 @@ BlazeComponent.extendComponent({
} else {
showDesktopDragHandles = false;
}
if (!Utils.isMiniScreen() && showDesktopDragHandles) {
if (Utils.isMiniScreen() || showDesktopDragHandles) {
$swimlanesDom.sortable({
handle: '.js-swimlane-header-handle',
});
@@ -215,9 +212,8 @@ BlazeComponent.extendComponent({
});
}
// Disable drag-dropping if the current user is not a board member or is miniscreen
// Disable drag-dropping if the current user is not a board member
$swimlanesDom.sortable('option', 'disabled', !userIsMember());
$swimlanesDom.sortable('option', 'disabled', Utils.isMiniScreen());
});
function userIsMember() {
+6 -7
View File
@@ -1,5 +1,5 @@
const subManager = new SubsManager();
const { calculateIndex, enableClickOnTouch } = Utils;
const { calculateIndex } = Utils;
Template.boardListHeaderBar.events({
'click .js-open-archived-board'() {
@@ -9,7 +9,7 @@ Template.boardListHeaderBar.events({
Template.boardListHeaderBar.helpers({
title() {
return FlowRouter.getRouteName() == 'home' ? 'my-boards' : 'public';
return FlowRouter.getRouteName() === 'home' ? 'my-boards' : 'public';
},
templatesBoardId() {
return Meteor.user() && Meteor.user().getTemplatesBoardId();
@@ -68,9 +68,6 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
// Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
$boards.sortable('option', 'disabled', !userIsAllowedToMove());
@@ -82,11 +79,13 @@ BlazeComponent.extendComponent({
archived: false,
type: 'board',
};
if (FlowRouter.getRouteName() == 'home')
if (FlowRouter.getRouteName() === 'home')
query['members.userId'] = Meteor.userId();
else query.permission = 'public';
return Boards.find(query, { sort: { sort: 1 /* boards default sorting */ } });
return Boards.find(query, {
sort: { sort: 1 /* boards default sorting */ },
});
},
isStarred() {
const user = Meteor.user();
+2 -1
View File
@@ -33,7 +33,7 @@ $spaceBetweenTiles = 16px
overflow: hidden;
background-color: #999
color: #f6f6f6
height: 90px
height: auto
font-size: 16px
line-height: 22px
border-radius: 3px
@@ -44,6 +44,7 @@ $spaceBetweenTiles = 16px
margin: ($spaceBetweenTiles/2)
position: relative
text-decoration: none
word-wrap: break-word
&.tile
background-size: auto
+17 -29
View File
@@ -1,5 +1,5 @@
const subManager = new SubsManager();
const { calculateIndexData, enableClickOnTouch } = Utils;
const { calculateIndexData } = Utils;
let cardColors;
Meteor.startup(() => {
@@ -56,9 +56,8 @@ BlazeComponent.extendComponent({
},
votePublic() {
const card = this.currentData();
if (card.vote)
return card.vote.public
return null
if (card.vote) return card.vote.public;
return null;
},
voteCountPositive() {
const card = this.currentData();
@@ -232,9 +231,6 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch('.card-checklist-items .js-checklist');
const $subtasksDom = this.$('.card-subtasks-items');
$subtasksDom.sortable({
@@ -270,26 +266,18 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch('.card-subtasks-items .js-subtasks');
function userIsMember() {
return Meteor.user() && Meteor.user().isBoardMember();
}
// Disable sorting if the current user is not a board member
this.autorun(() => {
if ($checklistsDom.data('sortable')) {
$checklistsDom.sortable('option', 'disabled', !userIsMember());
const disabled = !userIsMember() || Utils.isMiniScreen();
if ($checklistsDom.data('uiSortable') || $checklistsDom.data('sortable')) {
$checklistsDom.sortable('option', 'disabled', disabled);
}
if ($subtasksDom.data('sortable')) {
$subtasksDom.sortable('option', 'disabled', !userIsMember());
}
if ($checklistsDom.data('sortable')) {
$checklistsDom.sortable('option', 'disabled', Utils.isMiniScreen());
}
if ($subtasksDom.data('sortable')) {
$subtasksDom.sortable('option', 'disabled', Utils.isMiniScreen());
if ($subtasksDom.data('uiSortable') || $subtasksDom.data('sortable')) {
$subtasksDom.sortable('option', 'disabled', disabled);
}
});
},
@@ -380,7 +368,7 @@ BlazeComponent.extendComponent({
}
},
'click .js-go-to-linked-card'() {
Utils.goCardId(this.data().linkedId)
Utils.goCardId(this.data().linkedId);
},
'click .js-member': Popup.open('cardMember'),
'click .js-add-members': Popup.open('cardMembers'),
@@ -391,7 +379,7 @@ BlazeComponent.extendComponent({
'click .js-start-date': Popup.open('editCardStartDate'),
'click .js-due-date': Popup.open('editCardDueDate'),
'click .js-end-date': Popup.open('editCardEndDate'),
'click .js-show-positive-votes':Popup.open('positiveVoteMembers'),
'click .js-show-positive-votes': Popup.open('positiveVoteMembers'),
'click .js-show-negative-votes': Popup.open('negativeVoteMembers'),
'mouseenter .js-card-details'() {
const parentComponent = this.parentComponent().parentComponent();
@@ -420,9 +408,9 @@ BlazeComponent.extendComponent({
const forIt = $(e.target).hasClass('js-vote-positive');
let newState = null;
if (
this.voteState() == null ||
(this.voteState() == false && forIt) ||
(this.voteState() == true && !forIt)
this.voteState() === null ||
(this.voteState() === false && forIt) ||
(this.voteState() === true && !forIt)
) {
newState = forIt;
}
@@ -658,7 +646,7 @@ Template.cardDetailsActionsPopup.events({
},
});
Template.editCardTitleForm.onRendered(function () {
Template.editCardTitleForm.onRendered(function() {
autosize(this.$('.js-edit-card-title'));
});
@@ -672,7 +660,7 @@ Template.editCardTitleForm.events({
},
});
Template.editCardRequesterForm.onRendered(function () {
Template.editCardRequesterForm.onRendered(function() {
autosize(this.$('.js-edit-card-requester'));
});
@@ -685,7 +673,7 @@ Template.editCardRequesterForm.events({
},
});
Template.editCardAssignerForm.onRendered(function () {
Template.editCardAssignerForm.onRendered(function() {
autosize(this.$('.js-edit-card-assigner'));
});
@@ -825,7 +813,7 @@ Template.copyChecklistToManyCardsPopup.events({
// copy subtasks
cursor = Cards.find({ parentId: oldId });
cursor.forEach(function () {
cursor.forEach(function() {
'use strict';
const subtask = arguments[0];
subtask.parentId = _id;
+19 -10
View File
@@ -1,4 +1,4 @@
const { calculateIndexData, enableClickOnTouch } = Utils;
const { calculateIndexData, capitalize } = Utils;
function initSorting(items) {
items.sortable({
@@ -36,9 +36,6 @@ function initSorting(items) {
checklistItem.move(checklistId, sortIndex.base);
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-checklist-item:not(.placeholder)');
}
BlazeComponent.extendComponent({
@@ -54,14 +51,15 @@ BlazeComponent.extendComponent({
return Meteor.user() && Meteor.user().isBoardMember();
}
// Disable sorting if the current user is not a board member
// Disable sorting if the current user is not a board member or is a miniscreen
self.autorun(() => {
const $itemsDom = $(self.itemsDom);
if ($itemsDom.data('sortable')) {
$(self.itemsDom).sortable('option', 'disabled', !userIsMember());
}
if ($itemsDom.data('sortable')) {
$(self.itemsDom).sortable('option', 'disabled', Utils.isMiniScreen());
if ($itemsDom.data('uiSortable') || $itemsDom.data('sortable')) {
$(self.itemsDom).sortable(
'option',
'disabled',
!userIsMember() || Utils.isMiniScreen(),
);
}
});
},
@@ -177,6 +175,16 @@ BlazeComponent.extendComponent({
}
},
focusChecklistItem(event) {
// If a new checklist is created, pre-fill the title and select it.
const checklist = this.currentData().checklist;
if (!checklist) {
const textarea = event.target;
textarea.value = capitalize(TAPi18n.__('r-checklist'));
textarea.select();
}
},
events() {
const events = {
'click .toggle-delete-checklist-dialog'(event) {
@@ -196,6 +204,7 @@ BlazeComponent.extendComponent({
'submit .js-edit-checklist-item': this.editChecklistItem,
'click .js-delete-checklist-item': this.deleteItem,
'click .confirm-checklist-delete': this.deleteChecklist,
'focus .js-add-checklist-item': this.focusChecklistItem,
keydown: this.pressKey,
},
];
+2 -2
View File
@@ -4,8 +4,8 @@ template(name="minicard")
class="{{#if isLinkedBoard}}linked-board{{/if}}"
class="minicard-{{colorClass}}")
if isMiniScreen
//.handle
// .fa.fa-arrows
.handle
.fa.fa-arrows
unless isMiniScreen
if showDesktopDragHandles
.handle
+4 -18
View File
@@ -1,6 +1,6 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const { calculateIndex, enableClickOnTouch } = Utils;
const { calculateIndex } = Utils;
BlazeComponent.extendComponent({
// Proxy
@@ -114,9 +114,6 @@ BlazeComponent.extendComponent({
},
});
// ugly touch event hotfix
enableClickOnTouch(itemsSelector);
this.autorun(() => {
let showDesktopDragHandles = false;
currentUser = Meteor.user();
@@ -129,7 +126,7 @@ BlazeComponent.extendComponent({
showDesktopDragHandles = false;
}
if (!Utils.isMiniScreen() && showDesktopDragHandles) {
if (Utils.isMiniScreen() || showDesktopDragHandles) {
$cards.sortable({
handle: '.handle',
});
@@ -139,27 +136,16 @@ BlazeComponent.extendComponent({
});
}
if ($cards.data('sortable')) {
if ($cards.data('uiSortable') || $cards.data('sortable')) {
$cards.sortable(
'option',
'disabled',
// Disable drag-dropping when user is not member/is miniscreen
// Disable drag-dropping when user is not member
!userIsMember(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
}
if ($cards.data('sortable')) {
$cards.sortable(
'option',
'disabled',
// Disable drag-dropping when user is not member/is miniscreen
Utils.isMiniScreen(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
}
});
// We want to re-run this function any time a card is added.
+1 -2
View File
@@ -30,10 +30,9 @@ template(name="listHeader")
if canSeeAddCard
a.js-add-card.fa.fa-plus.list-header-plus-icon
a.fa.fa-navicon.js-open-list-menu
//a.list-header-handle.handle.fa.fa-arrows.js-list-handle
else
a.list-header-menu-icon.fa.fa-angle-right.js-select-list
//a.list-header-handle.handle.fa.fa-arrows.js-list-handle
a.list-header-handle.handle.fa.fa-arrows.js-list-handle
else if currentUser.isBoardMember
if isWatching
i.list-header-watch-icon.fa.fa-eye
+5
View File
@@ -135,6 +135,10 @@ $popupWidth = 300px
margin-bottom: 8px
.pop-over-list
li
display: block
clear: both
li > a
clear: both
cursor: pointer
@@ -316,6 +320,7 @@ $popupWidth = 300px
input[type="file"]
margin: 4px 0 12px
width: 100%
box-sizing: border-box
.pop-over-list
li > a
+8 -9
View File
@@ -196,14 +196,14 @@ Template.boardMenuPopup.events({
},
'click .js-change-board-color': Popup.open('boardChangeColor'),
'click .js-change-language': Popup.open('changeLanguage'),
'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function () {
'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
currentBoard.archive();
// XXX We should have some kind of notification on top of the page to
// confirm that the board was successfully archived.
FlowRouter.go('home');
}),
'click .js-delete-board': Popup.afterConfirm('deleteBoard', function () {
'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
Popup.close();
Boards.remove(currentBoard._id);
@@ -215,17 +215,16 @@ Template.boardMenuPopup.events({
'click .js-card-settings': Popup.open('boardCardSettings'),
});
Template.boardMenuPopup.onCreated(function () {
Template.boardMenuPopup.onCreated(function() {
this.apiEnabled = new ReactiveVar(false);
Meteor.call('_isApiEnabled', (e, result) => {
this.apiEnabled.set(result)
})
})
this.apiEnabled.set(result);
});
});
Template.boardMenuPopup.helpers({
withApi() {
return Template.instance().apiEnabled.get()
return Template.instance().apiEnabled.get();
},
exportUrl() {
const params = {
@@ -248,7 +247,7 @@ Template.memberPopup.events({
Popup.close();
},
'click .js-change-role': Popup.open('changePermissions'),
'click .js-remove-member': Popup.afterConfirm('removeMember', function () {
'click .js-remove-member': Popup.afterConfirm('removeMember', function() {
const boardId = Session.get('currentBoard');
const memberId = this.userId;
Cards.find({ boardId, members: memberId }).forEach(card => {
+6 -32
View File
@@ -1,6 +1,6 @@
import { Cookies } from 'meteor/ostrio:cookies';
const cookies = new Cookies();
const { calculateIndex, enableClickOnTouch } = Utils;
const { calculateIndex } = Utils;
function currentListIsInThisSwimlane(swimlaneId) {
const currentList = Lists.findOne(Session.get('currentList'));
@@ -87,9 +87,6 @@ function initSortable(boardComponent, $listsDom) {
},
});
// ugly touch event hotfix
enableClickOnTouch('.js-list:not(.js-list-composer)');
function userIsMember() {
return (
Meteor.user() &&
@@ -111,7 +108,7 @@ function initSortable(boardComponent, $listsDom) {
showDesktopDragHandles = false;
}
if (!Utils.isMiniScreen() && showDesktopDragHandles) {
if (Utils.isMiniScreen() || showDesktopDragHandles) {
$listsDom.sortable({
handle: '.js-list-handle',
});
@@ -122,34 +119,12 @@ function initSortable(boardComponent, $listsDom) {
}
const $listDom = $listsDom;
if ($listDom.data('sortable')) {
if ($listDom.data('uiSortable') || $listDom.data('sortable')) {
$listsDom.sortable(
'option',
'disabled',
// Disable drag-dropping when user is not member/is worker/is miniscreen
!userIsMember(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
}
if ($listDom.data('sortable')) {
$listsDom.sortable(
'option',
'disabled',
// Disable drag-dropping when user is not member/is worker/is miniscreen
Meteor.user().isWorker(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
}
if ($listDom.data('sortable')) {
$listsDom.sortable(
'option',
'disabled',
// Disable drag-dropping when user is not member/is worker/is miniscreen
Utils.isMiniScreen(),
// Disable drag-dropping when user is not member/is worker
!userIsMember() || Meteor.user().isWorker(),
// Not disable drag-dropping while in multi-selection mode
// MultiSelection.isActive() || !userIsMember(),
);
@@ -210,8 +185,7 @@ BlazeComponent.extendComponent({
}
const noDragInside = ['a', 'input', 'textarea', 'p'].concat(
Utils.isMiniScreen() ||
(!Utils.isMiniScreen() && showDesktopDragHandles)
Utils.isMiniScreen() || showDesktopDragHandles
? ['.js-list-handle', '.js-swimlane-header-handle']
: ['.js-list-header'],
);
+11 -2
View File
@@ -112,11 +112,20 @@ template(name="changeSettingsPopup")
i.fa.fa-check
unless currentUser.isWorker
li
label.bold
label.bold.clear
i.fa.fa-sort-numeric-asc
| {{_ 'show-cards-minimum-count'}}
input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="0" max="99" onkeydown="return false")
input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}")
label.bold.clear
i.fa.fa-calendar
| {{_ 'start-day-of-week'}}
select#start-day-of-week.inline-input.left
each day in weekDays startDayOfWeek
if day.isSelected
option(selected="true", value="#{day.value}") #{day.name}
else
option(value="#{day.value}") #{day.name}
input.js-apply-user-settings.left(type="submit" value="{{_ 'apply'}}")
template(name="userDeletePopup")
unless currentUser.isWorker
+35 -3
View File
@@ -224,6 +224,27 @@ Template.changeSettingsPopup.helpers({
return cookies.get('limitToShowCardsCount');
}
},
weekDays(startDay) {
return [
TAPi18n.__('sunday'),
TAPi18n.__('monday'),
TAPi18n.__('tuesday'),
TAPi18n.__('wednesday'),
TAPi18n.__('thursday'),
TAPi18n.__('friday'),
TAPi18n.__('saturday'),
].map(function(day, index) {
return { name: day, value: index, isSelected: index === startDay };
});
},
startDayOfWeek() {
currentUser = Meteor.user();
if (currentUser) {
return currentUser.getStartDayOfWeek();
} else {
return cookies.get('startDayOfWeek');
}
},
});
Template.changeSettingsPopup.events({
@@ -247,20 +268,31 @@ Template.changeSettingsPopup.events({
cookies.set('hasHiddenSystemMessages', 'true');
}
},
'click .js-apply-show-cards-at'(event, templateInstance) {
'click .js-apply-user-settings'(event, templateInstance) {
event.preventDefault();
const minLimit = parseInt(
templateInstance.$('#show-cards-count-at').val(),
10,
);
const startDay = parseInt(
templateInstance.$('#start-day-of-week').val(),
10,
);
const currentUser = Meteor.user();
if (!isNaN(minLimit)) {
currentUser = Meteor.user();
if (currentUser) {
Meteor.call('changeLimitToShowCardsCount', minLimit);
} else {
cookies.set('limitToShowCardsCount', minLimit);
}
Popup.back();
}
if (!isNaN(startDay)) {
if (currentUser) {
Meteor.call('changeStartDayOfWeek', startDay);
} else {
cookies.set('startDayOfWeek', startDay);
}
}
Popup.back();
},
});
+10
View File
@@ -10,12 +10,22 @@ DatePicker = BlazeComponent.extendComponent({
this.defaultTime = defaultTime;
},
startDayOfWeek() {
const currentUser = Meteor.user();
if (currentUser) {
return currentUser.getStartDayOfWeek();
} else {
return 1;
}
},
onRendered() {
const $picker = this.$('.js-datepicker')
.datepicker({
todayHighlight: true,
todayBtn: 'linked',
language: TAPi18n.getLanguage(),
weekStart: this.startDayOfWeek(),
})
.on(
'changeDate',
+1 -1
View File
@@ -38,7 +38,7 @@ version: '2'
# sudo service docker start
# ----------------------------------------------------------------------------------
# ==== USAGE OF THIS docker-compose.yml ====
# 1) For seeing does Wekan work, try this and check with your webbroser:
# 1) For seeing does Wekan work, try this and check with your web browser:
# docker-compose up
# 2) Stop Wekan and start Wekan in background:
# docker-compose stop
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Označit vše jako přečtené",
"remove-all-read": "Remove all read",
"allow-rename": "Povolit přejmenování",
"allowRenamePopup-title": "Povolit přejmenování"
"allowRenamePopup-title": "Povolit přejmenování",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+15 -7
View File
@@ -1,9 +1,9 @@
{
"accept": "Accepter",
"accept": "Acceptér",
"act-activity-notify": "Aktivitetsnotits",
"act-addAttachment": "tilføjede vedhæftningen __attachment__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
"act-deleteAttachment": "slettede vedhæftning __attachment__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
"act-addSubtask": "tilføjede delopgave __subtask__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
"act-addSubtask": "tilføjede delopgaven __subtask__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
"act-addLabel": "Tilføjede etiketten __label__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
"act-addedLabel": "Tilføjede etiketten __label__ til kortet __card__ på listen __list__ i svømmebanen __swimlane__ på tavlen __board__",
"act-removeLabel": "Fjernede etiketten __label__ fra kortet __card__ på listen __list__ i svømmebanen __swimlane__ på kortet __board__",
@@ -336,13 +336,13 @@
"filter-on-desc": "Du filtrerer kort på denne tavle. Klik her for at redigere filteret.",
"filter-to-selection": "Filtrér til valgte",
"advanced-filter-label": "Avanceret filter",
"advanced-filter-description": "Avanceret filter gør det muligt at skrive en tekststreng indeholdende følgende operatører: == != <= >= && || ( ) Mellemrum anvendes som adskillelsestegn mellem operatørerne. Du kan filtrere alle Brugerdefinerede felter ved at taste deres navne og værdier. Som eksempel: Felt1 == Værdi1. Bemærk: Hvis felter eller værdier indeholder mellemrum, så skal du indkapsle dem i enkeltcitationstegn. Som eksempel: 'Felt 1' == I\\'m. Du kan også kombinere flere betingelser. Som eksempel: F1 == V1 || F1 == V2. Normalt vil alle operatører blive fortolket fra venstre mod højre. Du kan ændre rækkefølgen ved brug af parenteser. Som eksempel: F1 == V1 && (F2 == V2 || F2 == V3). Du kan også søge i tekstfelter med brug af regulære udtryk: F1 == /Tes.*/i",
"advanced-filter-description": "Avanceret filter gør det muligt at skrive en tekststreng indeholdende følgende operatører: == != <= >= && || ( ) Mellemrum anvendes som adskillelsestegn mellem operatørerne. Du kan filtrere alle Brugerdefinerede felter ved at taste deres navne og værdier. Som eksempel: Felt1 == Værdi1. Bemærk: Hvis felter eller værdier indeholder mellemrum, så skal du indkapsle dem i enkeltcitationstegn. Som eksempel: 'Felt 1' == 'Værdi1'. For at springe over enkelte kontroltegn (' \\/), så kan \\ benyttes. Som eksempel: Felt1 == Så\\'n. Du kan også kombinere flere betingelser. Som eksempel: F1 == V1 || F1 == V2. Normalt vil alle operatører blive fortolket fra venstre mod højre. Du kan ændre rækkefølgen ved brug af parenteser. Som eksempel: F1 == V1 && (F2 == V2 || F2 == V3). Du kan også søge i tekstfelter med brug af regulære udtryk: F1 == /Tes.*/i",
"fullname": "Fuldt navn",
"header-logo-title": "Gå tilbage til siden med dine tavler",
"hide-system-messages": "Skjul systembeskeder",
"headerBarCreateBoardPopup-title": "Opret tavle",
"home": "Hjem",
"import": "Import",
"import": "Importér",
"link": "Link",
"import-board": "importér tavle",
"import-board-c": "Importér tavle",
@@ -433,7 +433,7 @@
"profile": "Profil",
"public": "Offentlig",
"public-desc": "Denne tavle er offentlig. Den er synlig for alle med linket og vil blive vist i søgemaskiner som Google. Det er kun personer tilføjet til tavlen, der kan redigere. ",
"quick-access-description": "Stjernemarkér en tavle for at tilføje en genvej i denne bjælke.",
"quick-access-description": "Stjernemarkér en tavle for at tilføje genvej i denne bjælke.",
"remove-cover": "Fjern omslag",
"remove-from-board": "Fjern fra tavle",
"remove-label": "Fjern etikette",
@@ -469,7 +469,7 @@
"star-board-title": "Klik for at stjernemarkere denne tavle. Den vil blive vist i toppen af din liste over tavler.",
"starred-boards": "Tavler med stjerner",
"starred-boards-description": "Tavler med stjerner vises i toppen af din liste over tavler.",
"subscribe": "Annonér",
"subscribe": "Abonnér",
"team": "Team",
"this-board": "denne tavle",
"this-card": "dette kort",
@@ -774,5 +774,13 @@
"mark-all-as-read": "Markér alle som læst",
"remove-all-read": "Fjern alle læste",
"allow-rename": "Tillad omdøb",
"allowRenamePopup-title": "Tillad omdøb"
"allowRenamePopup-title": "Tillad omdøb",
"start-day-of-week": "Angiv dag for ugestart",
"monday": "Mandag",
"tuesday": "Tirsdag",
"wednesday": "Onsdag",
"thursday": "Torsdag",
"friday": "Fredag",
"saturday": "Lørdag",
"sunday": "Søndag"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Alle als gelesen markieren",
"remove-all-read": "Alle gelesenen entfernen",
"allow-rename": "Umbenennen erlauben",
"allowRenamePopup-title": "Umbenennen erlauben"
"allowRenamePopup-title": "Umbenennen erlauben",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -777,5 +777,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Marcar todo como leido",
"remove-all-read": "Remove all read",
"allow-rename": "Permitir renombrar",
"allowRenamePopup-title": "Permitir renombrar"
"allowRenamePopup-title": "Permitir renombrar",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "علامت همه به خوانده شده",
"remove-all-read": "حذف همه خوانده شده",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Merkkaa kaikki luetuksi",
"remove-all-read": "Poista kaikki luetut",
"allow-rename": "Salli uudelleennimeäminen",
"allowRenamePopup-title": "Salli uudelleennimeäminen"
"allowRenamePopup-title": "Salli uudelleennimeäminen",
"start-day-of-week": "Aseta viikon alkamispäivä",
"monday": "Maanantai",
"tuesday": "Tiistai",
"wednesday": "Keskiviikko",
"thursday": "Torstai",
"friday": "Perjantai",
"saturday": "Lauantai",
"sunday": "Sunnuntai"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Marquer comme lus",
"remove-all-read": "Supprimer les lus",
"allow-rename": "Autoriser le renommage",
"allowRenamePopup-title": "Autoriser le renommage"
"allowRenamePopup-title": "Autoriser le renommage",
"start-day-of-week": "Définir le jour de début de semaine",
"monday": "Lundi",
"tuesday": "Mardi",
"wednesday": "Mercredi",
"thursday": "Jeudi",
"friday": "Vendredi",
"saturday": "Samedi",
"sunday": "Dimanche"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "לסמן הכול כאילו שנקראו",
"remove-all-read": "הסרת כל אלו שנקראו",
"allow-rename": "לאפשר שינוי שם",
"allowRenamePopup-title": "לאפשר שינוי שם"
"allowRenamePopup-title": "לאפשר שינוי שם",
"start-day-of-week": "הגדרת יום תחילת השבוע",
"monday": "יום שני",
"tuesday": "יום שלישי",
"wednesday": "יום רביעי",
"thursday": "יום חמישי",
"friday": "יום שישי",
"saturday": "שבת",
"sunday": "יום ראשון"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Segna come letto",
"remove-all-read": "Rimuovi tutti i già letti",
"allow-rename": "Consenti Rinomina",
"allowRenamePopup-title": "Consenti Rinomina"
"allowRenamePopup-title": "Consenti Rinomina",
"start-day-of-week": "Imposta l'inizio del giorno della settimana",
"monday": "Lunedi",
"tuesday": "Martedi",
"wednesday": "Mercoledi",
"thursday": "Giovedi",
"friday": "Venerdi",
"saturday": "Sabato",
"sunday": "Domenica"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "全て既読にする",
"remove-all-read": "全ての既読を削除",
"allow-rename": "リネームを許可する",
"allowRenamePopup-title": "リネームを許可する"
"allowRenamePopup-title": "リネームを許可する",
"start-day-of-week": "週の始まりを設定",
"monday": "月曜",
"tuesday": "火曜",
"wednesday": "水曜",
"thursday": "木曜",
"friday": "金曜",
"saturday": "土曜",
"sunday": "日曜"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Markeer alles als gelezen",
"remove-all-read": "verwijder alle gelezen",
"allow-rename": "Sta Hernoemen toe",
"allowRenamePopup-title": "Sta Hernoemen toe"
"allowRenamePopup-title": "Sta Hernoemen toe",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Zaznacz wszystkie jako przeczytane",
"remove-all-read": "Usuń wszystkie przeczytane",
"allow-rename": "Zezwól na zmianę nazwy",
"allowRenamePopup-title": "Zezwól na zmianę nazwy"
"allowRenamePopup-title": "Zezwól na zmianę nazwy",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Marcar todas como lidas",
"remove-all-read": "Remover todas lidas",
"allow-rename": "Permitir renomear",
"allowRenamePopup-title": "Permitir renomear"
"allowRenamePopup-title": "Permitir renomear",
"start-day-of-week": "Definir dia em que a semana começa",
"monday": "Segunda",
"tuesday": "Terça",
"wednesday": "Quarta",
"thursday": "Quinta",
"friday": "Sexta",
"saturday": "Sábado",
"sunday": "Domingo"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+12 -4
View File
@@ -164,10 +164,10 @@
"cardCustomField-datePopup-title": "Изменить дату",
"cardCustomFieldsPopup-title": "редактировать настраиваемые поля",
"cardStartVotingPopup-title": "Голосовать",
"positiveVoteMembersPopup-title": "Proponents",
"negativeVoteMembersPopup-title": "Opponents",
"positiveVoteMembersPopup-title": "Сторонники",
"negativeVoteMembersPopup-title": "Противники",
"vote-question": "Вопрос для голосования",
"vote-public": "Public vote",
"vote-public": "Открытое голосование",
"vote-for-it": "за",
"vote-against": "против",
"cardDeletePopup-title": "Удалить карточку?",
@@ -774,5 +774,13 @@
"mark-all-as-read": "Отметить все как прочитанные",
"remove-all-read": "Удалить все прочитанные",
"allow-rename": "Разрешить переименование",
"allowRenamePopup-title": "Разрешить переименование"
"allowRenamePopup-title": "Разрешить переименование",
"start-day-of-week": "Установить день начала недели",
"monday": "Понедельник",
"tuesday": "Вторник",
"wednesday": "Среда",
"thursday": "Четверг",
"friday": "Пятница",
"saturday": "Суббота",
"sunday": "Воскресенье"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Označi sve kao pročitano",
"remove-all-read": "Ukloni sve pročitano",
"allow-rename": "Dozvoli preimenovanje",
"allowRenamePopup-title": "Dozvoli preimenovanje"
"allowRenamePopup-title": "Dozvoli preimenovanje",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "标记全部已读",
"remove-all-read": "移除所有已读",
"allow-rename": "允许重命名",
"allowRenamePopup-title": "允许重命名"
"allowRenamePopup-title": "允许重命名",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "Mark all as read",
"remove-all-read": "Remove all read",
"allow-rename": "Allow Rename",
"allowRenamePopup-title": "Allow Rename"
"allowRenamePopup-title": "Allow Rename",
"start-day-of-week": "Set day of the week start",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
}
+9 -1
View File
@@ -774,5 +774,13 @@
"mark-all-as-read": "標示全部已讀",
"remove-all-read": "移除所有已讀",
"allow-rename": "允許更名",
"allowRenamePopup-title": "允許更名"
"allowRenamePopup-title": "允許更名",
"start-day-of-week": "一周的第一天",
"monday": "周一",
"tuesday": "週二",
"wednesday": "週三",
"thursday": "週四",
"friday": "週五",
"saturday": "週六",
"sunday": "週日"
}
+4 -1
View File
@@ -1297,7 +1297,10 @@ if (Meteor.isServer) {
// Insert new board at last position in sort order.
Boards.before.insert((userId, doc) => {
const lastBoard = Boards.findOne({ sort: { $exists: true } }, { sort: { sort: -1 } });
const lastBoard = Boards.findOne(
{ sort: { $exists: true } },
{ sort: { sort: -1 } },
);
if (lastBoard && typeof lastBoard.sort !== 'undefined') {
doc.sort = lastBoard.sort + 1;
}
+15 -15
View File
@@ -732,7 +732,7 @@ Cards.helpers({
parentString(sep) {
return this.parentList()
.map(function (elem) {
.map(function(elem) {
return elem.title;
})
.join(sep);
@@ -1050,13 +1050,13 @@ Cards.helpers({
voteMemberPositive() {
if (this.vote && this.vote.positive)
return Users.find({ _id: { $in: this.vote.positive } })
return []
return Users.find({ _id: { $in: this.vote.positive } });
return [];
},
voteMemberNegative() {
if (this.vote && this.vote.negative)
return Users.find({ _id: { $in: this.vote.negative } })
return []
return Users.find({ _id: { $in: this.vote.negative } });
return [];
},
getId() {
@@ -1929,7 +1929,7 @@ if (Meteor.isServer) {
});
//New activity for card moves
Cards.after.update(function (userId, doc, fieldNames) {
Cards.after.update(function(userId, doc, fieldNames) {
const oldListId = this.previous.listId;
const oldSwimlaneId = this.previous.swimlaneId;
const oldBoardId = this.previous.boardId;
@@ -1975,7 +1975,7 @@ if (Meteor.isServer) {
// change list modifiedAt, when user modified the key values in timingaction array, if it's endAt, put the modifiedAt of list back to one year ago for sorting purpose
const modifiedAt = new Date(
new Date(value).getTime() -
(action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0),
(action === 'endAt' ? 365 * 24 * 3600 * 1e3 : 0),
); // set it as 1 year before
const boardId = list.boardId;
Lists.direct.update(
@@ -2029,7 +2029,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'GET',
'/api/boards/:boardId/swimlanes/:swimlaneId/cards',
function (req, res) {
function(req, res) {
const paramBoardId = req.params.boardId;
const paramSwimlaneId = req.params.swimlaneId;
Authentication.checkBoardAccess(req.userId, paramBoardId);
@@ -2039,7 +2039,7 @@ if (Meteor.isServer) {
boardId: paramBoardId,
swimlaneId: paramSwimlaneId,
archived: false,
}).map(function (doc) {
}).map(function(doc) {
return {
_id: doc._id,
title: doc.title,
@@ -2063,7 +2063,7 @@ if (Meteor.isServer) {
* title: string,
* description: string}]
*/
JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function (
JsonRoutes.add('GET', '/api/boards/:boardId/lists/:listId/cards', function(
req,
res,
) {
@@ -2076,7 +2076,7 @@ if (Meteor.isServer) {
boardId: paramBoardId,
listId: paramListId,
archived: false,
}).map(function (doc) {
}).map(function(doc) {
return {
_id: doc._id,
title: doc.title,
@@ -2098,7 +2098,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'GET',
'/api/boards/:boardId/lists/:listId/cards/:cardId',
function (req, res) {
function(req, res) {
const paramBoardId = req.params.boardId;
const paramListId = req.params.listId;
const paramCardId = req.params.cardId;
@@ -2130,7 +2130,7 @@ if (Meteor.isServer) {
* @param {string} [assignees] the array of maximum one ID of assignee of the new card
* @return_type {_id: string}
*/
JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function (
JsonRoutes.add('POST', '/api/boards/:boardId/lists/:listId/cards', function(
req,
res,
) {
@@ -2237,7 +2237,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'PUT',
'/api/boards/:boardId/lists/:listId/cards/:cardId',
function (req, res) {
function(req, res) {
Authentication.checkUserId(req.userId);
const paramBoardId = req.params.boardId;
const paramCardId = req.params.cardId;
@@ -2536,7 +2536,7 @@ if (Meteor.isServer) {
JsonRoutes.add(
'DELETE',
'/api/boards/:boardId/lists/:listId/cards/:cardId',
function (req, res) {
function(req, res) {
Authentication.checkUserId(req.userId);
const paramBoardId = req.params.boardId;
const paramListId = req.params.listId;
-1
View File
@@ -338,7 +338,6 @@ if (Meteor.isServer) {
isPasswordLoginDisabled() {
return process.env.PASSWORD_LOGIN_ENABLED === 'false';
},
});
}
+4 -4
View File
@@ -1,4 +1,4 @@
const DateString = Match.Where(function (dateAsString) {
const DateString = Match.Where(function(dateAsString) {
check(dateAsString, String);
return moment(dateAsString, moment.ISO_8601).isValid();
});
@@ -299,13 +299,13 @@ export class TrelloCreator {
}
}
return true;
})
});
if (positiveVotes.length > 0) {
cardToCreate.vote = {
question: cardToCreate.title,
public: true,
positive: positiveVotes,
}
};
}
}
@@ -369,7 +369,7 @@ export class TrelloCreator {
// so we make it server only, and let UI catch up once it is done, forget about latency comp.
const self = this;
if (Meteor.isServer) {
file.attachData(att.url, function (error) {
file.attachData(att.url, function(error) {
file.boardId = boardId;
file.cardId = cardId;
file.userId = self._user(att.idMemberCreator);
+21
View File
@@ -190,6 +190,13 @@ Users.attachSchema(
type: Number,
optional: true,
},
'profile.startDayOfWeek': {
/**
* startDayOfWeek field of the user
*/
type: Number,
optional: true,
},
'profile.starredBoards': {
/**
* list of starred board IDs
@@ -521,6 +528,12 @@ Users.helpers({
return profile.language || 'en';
},
getStartDayOfWeek() {
const profile = this.profile || {};
// default is 'Monday' (1)
return profile.startDayOfWeek ?? 1;
},
getTemplatesBoardId() {
return (this.profile || {}).templatesBoardId;
},
@@ -652,6 +665,10 @@ Users.mutations({
return { $set: { 'profile.showCardsCountAt': limit } };
},
setStartDayOfWeek(startDay) {
return { $set: { 'profile.startDayOfWeek': startDay } };
},
setBoardView(view) {
return {
$set: {
@@ -682,6 +699,10 @@ Meteor.methods({
check(limit, Number);
Meteor.user().setShowCardsCountAt(limit);
},
changeStartDayOfWeek(startDay) {
check(startDay, Number);
Meteor.user().setStartDayOfWeek(startDay);
},
});
if (Meteor.isServer) {
+563 -404
View File
File diff suppressed because it is too large. Load diff
+3 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v3.97.0",
"version": "v3.98.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
@@ -40,6 +40,7 @@
},
"homepage": "https://wekan.github.io",
"devDependencies": {
"babel-eslint": "^10.1.0",
"eslint": "^5.16.0",
"eslint-config-meteor": "0.0.9",
"eslint-config-prettier": "^3.6.0",
@@ -53,6 +54,7 @@
"prettier-eslint": "^9.0.1"
},
"dependencies": {
"@babel/core": "^7.9.0",
"@babel/runtime": "^7.9.2",
"ajv": "^5.0.0",
"babel-runtime": "^6.26.0",
+256 -2517
View File
File diff suppressed because it is too large. Load diff
+1 -466
View File
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v3.97
version: v3.98
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -1276,104 +1276,6 @@ paths:
'200':
description: |-
200 response
/api/boards/{board}/members/{user}/add:
post:
operationId: add_board_member
summary: Add New Board Member with Role
description: |
Only the admin user (the first user) can call the REST API.
**Note**: see [Boards.set_board_member_permission](#set_board_member_permission)
to later change the permissions.
tags:
- Users
- Boards
consumes:
- multipart/form-data
- application/json
parameters:
- name: action
in: formData
description: the action value
type: string
required: true
- name: isAdmin
in: formData
description: |
is the user an admin of the board
type: boolean
required: true
- name: isNoComments
in: formData
description: |
disable comments
type: boolean
required: true
- name: isCommentOnly
in: formData
description: |
only enable comments
type: boolean
required: true
- name: board
in: path
description: |
the board ID
type: string
required: true
- name: user
in: path
description: |
the user ID
type: string
required: true
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
type: object
properties:
_id:
type: string
title:
type: string
/api/boards/{board}/members/{user}/remove:
post:
operationId: post_board_user_remove
tags:
- Users
consumes:
- multipart/form-data
- application/json
parameters:
- name: action
in: formData
description: the action value
type: string
required: true
- name: board
in: path
description: the board value
type: string
required: true
- name: user
in: path
description: the user value
type: string
required: true
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
/api/boards/{board}/swimlanes:
get:
operationId: get_all_swimlanes
@@ -1490,184 +1392,6 @@ paths:
'200':
description: |-
200 response
/api/user:
get:
operationId: get_current_user
summary: returns the current user
tags:
- Users
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
$ref: "#/definitions/Users"
/api/users:
get:
operationId: get_all_users
summary: return all the users
description: |
Only the admin user (the first user) can call the REST API.
tags:
- Users
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
type: array
items:
type: object
properties:
_id:
type: string
username:
type: string
post:
operationId: new_user
summary: Create a new user
description: |
Only the admin user (the first user) can call the REST API.
tags:
- Users
consumes:
- multipart/form-data
- application/json
parameters:
- name: username
in: formData
description: |
the new username
type: string
required: true
- name: email
in: formData
description: |
the email of the new user
type: string
required: true
- name: password
in: formData
description: |
the password of the new user
type: string
required: true
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
type: object
properties:
_id:
type: string
/api/users/{user}:
get:
operationId: get_user
summary: get a given user
description: |
Only the admin user (the first user) can call the REST API.
tags:
- Users
parameters:
- name: user
in: path
description: |
the user ID
type: string
required: true
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
$ref: "#/definitions/Users"
put:
operationId: edit_user
summary: edit a given user
description: |
Only the admin user (the first user) can call the REST API.
Possible values for *action*:
- `takeOwnership`: The admin takes the ownership of ALL boards of the user (archived and not archived) where the user is admin on.
- `disableLogin`: Disable a user (the user is not allowed to login and his login tokens are purged)
- `enableLogin`: Enable a user
tags:
- Users
consumes:
- multipart/form-data
- application/json
parameters:
- name: action
in: formData
description: |
the action
type: string
required: true
- name: user
in: path
description: |
the user ID
type: string
required: true
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
type: object
properties:
_id:
type: string
title:
type: string
delete:
operationId: delete_user
summary: Delete a user
description: |
Only the admin user (the first user) can call the REST API.
tags:
- Users
parameters:
- name: user
in: path
description: |
the ID of the user to delete
type: string
required: true
produces:
- application/json
security:
- UserSecurity: []
responses:
'200':
description: |-
200 response
schema:
type: object
properties:
_id:
type: string
/api/users/{user}/boards:
get:
operationId: get_boards_from_user
@@ -2407,192 +2131,3 @@ definitions:
- createdAt
- modifiedAt
- type
Users:
type: object
description: A User in wekan
properties:
username:
description: |
the username of the user
type: string
x-nullable: true
emails:
description: |
the list of emails attached to a user
type: array
items:
$ref: "#/definitions/UsersEmails"
x-nullable: true
createdAt:
description: |
creation date of the user
type: string
modifiedAt:
type: string
profile:
description: |
profile settings
$ref: "#/definitions/UsersProfile"
x-nullable: true
services:
description: |
services field of the user
type: object
x-nullable: true
heartbeat:
description: |
last time the user has been seen
type: string
x-nullable: true
isAdmin:
description: |
is the user an admin of the board?
type: boolean
x-nullable: true
createdThroughApi:
description: |
was the user created through the API?
type: boolean
x-nullable: true
loginDisabled:
description: |
loginDisabled field of the user
type: boolean
x-nullable: true
authenticationMethod:
description: |
authentication method of the user
type: string
required:
- createdAt
- modifiedAt
- authenticationMethod
UsersEmails:
type: object
properties:
address:
description: |
The email address
type: string
verified:
description: |
Has the email been verified
type: boolean
required:
- address
- verified
UsersProfile:
type: object
properties:
avatarUrl:
description: |
URL of the avatar of the user
type: string
emailBuffer:
description: |
list of email buffers of the user
type: array
items:
type: string
x-nullable: true
fullname:
description: |
full name of the user
type: string
showDesktopDragHandles:
description: |
does the user want to hide system messages?
type: boolean
hiddenSystemMessages:
description: |
does the user want to hide system messages?
type: boolean
hiddenMinicardLabelText:
description: |
does the user want to hide minicard label texts?
type: boolean
initials:
description: |
initials of the user
type: string
invitedBoards:
description: |
board IDs the user has been invited to
type: array
items:
type: string
x-nullable: true
language:
description: |
language of the user
type: string
notifications:
description: |
enabled notifications for the user
type: array
items:
$ref: "#/definitions/UsersProfileNotifications"
activity:
description: |
The id of the activity this notification references
type: string
read:
description: |
the date on which this notification was read
type: string
showCardsCountAt:
description: |
showCardCountAt field of the user
type: number
starredBoards:
description: |
list of starred board IDs
type: array
items:
type: string
x-nullable: true
icode:
description: |
icode
type: string
boardView:
description: |
boardView field of the user
type: string
enum:
- board-view-lists
- board-view-swimlanes
- board-view-cal
listSortBy:
description: |
default sort list for user
type: string
enum:
- -modifiedat
- modifiedat
- -title
- title
- -sort
- sort
templatesBoardId:
description: |
Reference to the templates board
type: string
cardTemplatesSwimlaneId:
description: |
Reference to the card templates swimlane Id
type: string
listTemplatesSwimlaneId:
description: |
Reference to the list templates swimlane Id
type: string
boardTemplatesSwimlaneId:
description: |
Reference to the board templates swimlane Id
type: string
required:
- activity
- templatesBoardId
- cardTemplatesSwimlaneId
- listTemplatesSwimlaneId
- boardTemplatesSwimlaneId
+3
View File
@@ -53,6 +53,9 @@ call meteor npm install
REM del /S /F /Q .build
call meteor build .build --directory
copy fix-download-unicode\cfs_access-point.txt .build\bundle\programs\server\packages\cfs_access-point.js
REM ## Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
del /S /F /Q rm .build/bundle/programs/web.browser.legacy
REM ## Install some NPM packages
cd .build\bundle\programs\server
call meteor npm install
REM cd C:\repos\wekan\.meteor\local\build\programs\server
+2
View File
@@ -148,6 +148,8 @@ do
rm -rf .build
meteor build .build --directory
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf .build/bundle/programs/web.browser.legacy
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
#https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
+2
View File
@@ -11,6 +11,8 @@ meteor npm install
rm -rf .build
METEOR_PROFILE=100 meteor build .build --directory
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf .build/bundle/programs/web.browser.legacy
cd .build/bundle/programs/server
rm -rf node_modules
meteor npm install
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 397,
appVersion = 398,
# Increment this for every release.
appMarketingVersion = (defaultText = "3.97.0~2020-04-19"),
appMarketingVersion = (defaultText = "3.98.0~2020-04-25"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+2 -6
View File
@@ -1036,12 +1036,8 @@ Migrations.add('add-description-text-allowed', () => {
Migrations.add('add-sort-field-to-boards', () => {
Boards.find().forEach((board, index) => {
if (!board.hasOwnProperty('sort')) {
Boards.direct.update(
board._id,
{ $set: { sort: index } },
noValidate
);
if (!board.hasOwnProperty('sort')) {
Boards.direct.update(board._id, { $set: { sort: index } }, noValidate);
}
});
});
+2
View File
@@ -66,3 +66,5 @@ fi
# Drop indexes on database upgrade, when starting MongoDB
#mongo wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS
mongo wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.2" });' $BIND_OPTIONS
+2
View File
@@ -216,6 +216,8 @@ parts:
#meteor npm install --save bcrypt
# Change from npm-bcrypt directory back to .build/bundle/programs/server directory.
#cd ../../../../
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf .build/bundle/programs/web.browser.legacy
# Change to directory .build/bundle/programs/server
cd .build/bundle/programs/server
npm install
+2
View File
@@ -75,6 +75,8 @@ sudo -u wekan ${meteor} build --directory /home/wekan/app_build
sudo cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy
cd /home/wekan/app_build/bundle/programs/server/
sudo npm install
sudo chown -R wekan:wekan ./node_modules