diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e012daac3..eedd056f3 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -8,8 +8,8 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan" # - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling, # so changing to 21.10. https://github.com/wekan/wekan/issues/4488 -ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ iproute2 apt-transport-https libarchive-tools git" -ENV DEV_DEPS="curl python3 ca-certificates build-essential" +ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ iproute2 apt-transport-https libarchive-tools" +ENV DEV_DEPS="curl python3 ca-certificates build-essential git" ARG DEBIAN_FRONTEND=noninteractive ENV \ diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index b6c89a8ff..b6cbf4271 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -38,7 +38,7 @@ jobs: # https://github.com/docker/login-action - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' - uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 + uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -55,7 +55,7 @@ jobs: # Build and push Docker image with Buildx (don't push on PR) # https://github.com/docker/build-push-action - name: Build and push Docker image - uses: docker/build-push-action@31159d49c0d4756269a0940a750801a1ea5d7003 + uses: docker/build-push-action@5176d81f87c23d6fc96624dfdbcd9f3830bbe445 with: context: . push: ${{ github.event_name != 'pull_request' }} diff --git a/CHANGELOG.md b/CHANGELOG.md index d93ccda60..dfdf5f7cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,131 @@ Fixing other platforms In Progress. [How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585) -# Upcoming WeKan ® release +# v7.54 2024-08-07 WeKan ® release + +This release adds the following new features: + +- [Helm Chart: Add Support for Overriding Image Registry in Airgapped Environments](https://github.com/wekan/charts/pull/35). + Thanks to geilername. +- [PWA, move to standalone (standard) to display the status bar](https://github.com/wekan/wekan/pull/5484) + Thanks to mfilser. +- [Added info how with Caddy webserver config, PWA and Android app override icons, showing toolbars, etc](https://github.com/wekan/wekan/commit/55fc342f6d90d8e30b70a8903ecead1c4370bd89). + Thanks to xet7. + +and fixes the following bugs: + +- [Don't set background image in .board-canvas too](https://github.com/wekan/wekan/pull/5485). + Thanks to mfilser. +- [Bugfix, variable "color" didn't exist](https://github.com/wekan/wekan/pull/5486). + Thanks to mfilser. +- [Little opacity to minicards to see the background image a little bit](https://github.com/wekan/wekan/pull/5487). + Thanks to mfilser. +- [Remove attachment storage name from attachment list](https://github.com/wekan/wekan/pull/5488). + Thanks to mfilser. +- [Attachment popup back was broken since new attachment viewer, now fixed](https://github.com/wekan/wekan/pull/5489). + Thanks to mfilser. +- [Change Meteor.user() to ReactiveCache.getCurrentUser()](https://github.com/wekan/wekan/pull/5490). + Thanks to mfilser. +- [Fix empty parentId in cards](https://github.com/wekan/wekan/pull/5491). + Thanks to mfilser. +- [Sidebar xmark icon, add padding and background color](https://github.com/wekan/wekan/pull/5492). + Thanks to mfilser. +- [Board view, first column a bit smaller to save screen space](https://github.com/wekan/wekan/pull/5493). + Thanks to mfilser. +- [Minicard, show creator, defaultValue of schema and other code is now the same](https://github.com/wekan/wekan/pull/5494). + Thanks to mfilser. +- [Editor, Bugfix, copy text is now at each editor (textarea) again](https://github.com/wekan/wekan/pull/5495). + Thanks to mfilser. +- [Bugfix, Cards Count on mobile view was missing](https://github.com/wekan/wekan/pull/5496). + Thanks to mfilser. +- [ListHeader, simpler code logic at collapsed if conditions](https://github.com/wekan/wekan/pull/5497). + Thanks to mfilser. +- [Bugfix, edit description didn't work if it was clicked](https://github.com/wekan/wekan/pull/5498). + Thanks to mfilser. +- [Fix LDAP login fails after upgrade](https://github.com/wekan/wekan/commit/a4169f3da773e4fd961acd0266260085a753cdab). + Thanks to juppees and xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.53 2024-08-03 WeKan ® release + +This release adds the following new features: + +- [Added Dragscroll to scroll the board](https://github.com/wekan/wekan/pull/5477). + Click on an empty space in the board, hold the left mouse and move left and right + to scroll the board easily. + Thanks to mfilser. + +and adds the following updates: + +- [Updated release script: New install webpage location](https://github.com/wekan/wekan/commit/5e639a7c2d6dc1182ba95e44875ac8a6798a62be). + Thanks to xet7. +- [Updated dependencies](https://github.com/wekan/wekan/commit/3f9ae57144dc9befd674c784896d68b5db9df146). + Thanks to developers of dependencies. +- [Copied changes from wiki to docs](https://github.com/wekan/wekan/commit/aaca60b6760cc84b56a24fc15c93f23b4a34f06e). + Thanks to xet7. +- [Updated Snap Candidate to MongoDB 6.0.16](https://github.com/wekan/wekan/commit/1af1844f37d17f9f54ca358ccf0f44eed1dfbef4). + Thanks to MongoDB developers. + +and fixes the following bugs: + +- [Board Menu Popup's were opened twice because of 2 same event creation](https://github.com/wekan/wekan/pull/5478). + Thanks to mfilser. +- [Fixing of "mode is undefined" on first activity component creation](https://github.com/wekan/wekan/pull/5479). + Thanks to mfilser. +- [Changing card color now closes the popup and doesn't refresh the whole board page](https://github.com/wekan/wekan/pull/5480). + Thanks to mfilser. +- [Fix dragscroll package name](https://github.com/wekan/wekan/commit/45674806d78fddb8a3b8a75890e5059cc1a680ea). + Thanks to xet7. +- [Reducing card size in database if no planning poker was started](https://github.com/wekan/wekan/pull/5481). + Thanks to mfilser. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.52 2024-08-03 WeKan ® release + +This release adds the following new features: + +- [Helm Chart: Add option to set resource limits for initContainer](https://github.com/wekan/charts/pull/33). + Thanks to mreichelt-dicos. +- [Helm Chart: Fixes for mongodb persistence. Please test is this correct](https://github.com/wekan/charts/commit/7efb071dd91d76c3971e1865fd18f9d43d8c6891). + Thanks to emoritzx. +- [Helm Chart: Added info about rarely used running WeKan at subpath](https://github.com/wekan/charts/commit/7d4176c7b328c5477c1fa29a323574aac78616a9). + Thanks to emoritzx. + +and adds the following updates: + +- Updated dependencies. + [Part 1](https://github.com/wekan/wekan/pull/5460), + [Part 2](https://github.com/wekan/wekan/pull/5464), + [Part 3](https://github.com/wekan/wekan/pull/5460), + [Part 4](https://github.com/wekan/wekan/pull/5469), + [Part 5](https://github.com/wekan/wekan/pull/5470), + [Part 6](https://github.com/wekan/wekan/pull/5471), + [Part 7](https://github.com/wekan/wekan/pull/5473). + Thanks to dependabot. +- Added RepoCloud SaaS. + [Part 1](https://github.com/wekan/wekan/commit/21d6dfd79090f9885635f55537bd9fa1ef8539e1), + [Part 2](https://github.com/wekan/wekan/commit/e663ce038af397f547e8823d61ce5dc2e3cea84d), + [Part 3](https://github.com/wekan/wekan.github.io/commit/e9e0550824cdda31daae42df7c497fbd037fd78f). + Thanks to RepoCloud. +- [Updated WeKan app webmanifest](https://github.com/wekan/wekan/commit/745618626535743938b9d2e8c88afe6345807a85). + Thanks to xet7. +- [Revert forking of ldapjs](https://github.com/wekan/wekan/commit/c89f3ba3da6512169e033d76377a9190b35a92d2). + Thanks to xet7. + +and fixes the following bugs: + +- [Fixes to Clean light and Clean dark themes](https://github.com/wekan/wekan/pull/5458). + Thanks to abramchikd. +- [Activities, adding back "created at" field](https://github.com/wekan/wekan/pull/5476). + Thanks to mfilser. +- [Fix typos at attachments code](https://github.com/wekan/wekan/commit/de3bc9cb4d20590c45ff72ef7749d830ea3fc16c). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.51 2024-06-27 WeKan ® release This release adds the following updates: @@ -23,10 +147,23 @@ This release adds the following updates: Thanks to dependabot. - Moved docs from wiki to wekan repo docs directory, organized to subdirectories. Organizing and updating in progress. [Part 1](https://github.com/wekan/wekan/commit/1961e22cbd51e83aa131c8b092c7d43475a021eb), - [Part 1](https://github.com/wekan/wekan/commit/ce89ff48331a27ffb42d021833c78df3a462b9db), - [Part 1](https://github.com/wekan/wekan/commit/449c02c42a0183a49592ada89bdfb8f25e5db903). + [Part 2](https://github.com/wekan/wekan/commit/ce89ff48331a27ffb42d021833c78df3a462b9db), + [Part 3](https://github.com/wekan/wekan/commit/449c02c42a0183a49592ada89bdfb8f25e5db903), + [Part 4](https://github.com/wekan/wekan/commit/0fb2f7fdd6b6cb828ab4ea534204a5b834d2e19a), + [Part 5](https://github.com/wekan/wekan/commit/e9c1c620eb938349c30761497066daf41cdcfc19), + [Part 6](https://github.com/wekan/wekan/commit/6b7b66801b716e1d0bf2548b18eed4ed4e354f2d), + [Part 7](https://github.com/wekan/wekan/commit/1cfaddff9cd4fe84fb74c80d1585f2a5dd65f5ca), + [Part 8](https://github.com/wekan/wekan/commit/057ac4031eaa912b849c637e163f4dffa79a9329), + [Part 9](https://github.com/wekan/wekan/commit/52375df78380bbe3407b51dc986baaf6f31f40e4), + [Part 10](https://github.com/wekan/wekan/commit/00a56f6aaa0c2bcd24ca8829a0718b45e7cedf04), + [Part 11](https://github.com/wekan/wekan/commit/c863428aa2597457fc4931e7b1bdd75d6cc2610b). Thanks to xet7. +and fixes the following bugs: + +- [Fix ModernDark Cards not showing correctly](https://github.com/wekan/wekan/pull/5455). + Thanks to walster001. + Thanks to above GitHub users for their contributions and translators for their translations. # v7.50 2024-06-22 WeKan ® release diff --git a/Dockerfile b/Dockerfile index a9d5ef82f..28d9cada4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -202,7 +202,7 @@ ln -s "/usr/local/bin/node" "/usr/local/bin/nodejs" mkdir -p "/opt/nodejs/lib/node_modules/fibers/.node-gyp" "/root/.node-gyp/${NODE_VERSION} /home/wekan/.config" # Install node dependencies -npm install -g npm@${NPM_VERSION} +npm install -g npm@${NPM_VERSION} --production chown --recursive wekan:wekan /home/wekan/.config # Install Meteor @@ -222,11 +222,11 @@ cd /home/wekan/app mkdir -p /home/wekan/.npm chown --recursive wekan:wekan /home/wekan/.npm chmod u+w *.json -gosu wekan:wekan meteor npm install +gosu wekan:wekan meteor npm install --production gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build cd /home/wekan/app_build/bundle/programs/server/ chmod u+w *.json -gosu wekan:wekan meteor npm install +gosu wekan:wekan meteor npm install --production cd node_modules/fibers node build.js cd ../.. diff --git a/SECURITY.md b/SECURITY.md index e4c6312c3..3ca0e69e7 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,8 +1,7 @@ About money, see [CONTRIBUTING.md](CONTRIBUTING.md) Security is very important to us. If you discover any issue regarding security, please disclose -the information responsibly by sending an email to support (at) wekan.team using -[this PGP public key](support-at-wekan.team_pgp-publickey.asc) and not by +the information responsibly by sending an email to support@wekan.team and not by creating a GitHub issue. We will respond swiftly to fix verifiable security issues. We thank you with a place at our hall of fame page, that is diff --git a/Stackerfile.yml b/Stackerfile.yml index 0524c21c7..e346d878d 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v7.50.0" +appVersion: "v7.54.0" files: userUploads: - README.md diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index f15c9a71c..b3b193146 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -16,7 +16,6 @@ template(name="cardActivities") +activity(activity=activityData card=card mode=mode) template(name="editOrDeleteComment") - = ' - ' a.js-open-inlined-form {{_ "edit"}} = ' - ' a.js-delete-comment {{_ "delete"}} @@ -145,11 +144,10 @@ template(name="activity") +viewer = activity.comment.text +commentReactions(reactions=activity.comment.reactions commentId=activity.comment._id) - span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }} - if($eq currentUser._id activity.comment.userId) - +editOrDeleteComment - else if currentUser.isBoardAdmin - +editOrDeleteComment + if($eq currentUser._id activity.comment.userId) + +editOrDeleteComment + else if currentUser.isBoardAdmin + +editOrDeleteComment if($eq activity.activityType 'deleteComment') | {{{_ 'activity-deleteComment' activity.commentId}}}. @@ -242,3 +240,5 @@ template(name="activity") = ' @' else if(currentData.timeValue) | {{_ activity.activityType currentData.timeValue}} + + div(title=activity.createdAt).activity-meta {{ moment activity.createdAt }} diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 176d151df..1609dabf3 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -13,39 +13,41 @@ BlazeComponent.extendComponent({ const sidebar = Sidebar; sidebar && sidebar.callFirstWith(null, 'resetNextPeak'); this.autorun(() => { - let mode = this.data().mode; - const capitalizedMode = Utils.capitalize(mode); - let searchId; - if (mode === 'linkedcard' || mode === 'linkedboard') { - searchId = Utils.getCurrentCard().linkedId; - mode = mode.replace('linked', ''); - } else if (mode === 'card') { - searchId = Utils.getCurrentCardId(); - } else { - searchId = Session.get(`current${capitalizedMode}`); - } - const limit = this.page.get() * activitiesPerPage; - const user = ReactiveCache.getCurrentUser(); - const hideSystem = user ? user.hasHiddenSystemMessages() : false; - if (searchId === null) return; - - this.subscribe('activities', mode, searchId, limit, hideSystem, () => { - this.loadNextPageLocked = false; - - // TODO the guard can be removed as soon as the TODO above is resolved - if (!sidebar) return; - // If the sibear peak hasn't increased, that mean that there are no more - // activities, and we can stop calling new subscriptions. - // XXX This is hacky! We need to know excatly and reactively how many - // activities there are, we probably want to denormalize this number - // dirrectly into card and board documents. - const nextPeakBefore = sidebar.callFirstWith(null, 'getNextPeak'); - sidebar.calculateNextPeak(); - const nextPeakAfter = sidebar.callFirstWith(null, 'getNextPeak'); - if (nextPeakBefore === nextPeakAfter) { - sidebar.callFirstWith(null, 'resetNextPeak'); + let mode = this.data()?.mode; + if (mode) { + const capitalizedMode = Utils.capitalize(mode); + let searchId; + if (mode === 'linkedcard' || mode === 'linkedboard') { + searchId = Utils.getCurrentCard().linkedId; + mode = mode.replace('linked', ''); + } else if (mode === 'card') { + searchId = Utils.getCurrentCardId(); + } else { + searchId = Session.get(`current${capitalizedMode}`); } - }); + const limit = this.page.get() * activitiesPerPage; + const user = ReactiveCache.getCurrentUser(); + const hideSystem = user ? user.hasHiddenSystemMessages() : false; + if (searchId === null) return; + + this.subscribe('activities', mode, searchId, limit, hideSystem, () => { + this.loadNextPageLocked = false; + + // TODO the guard can be removed as soon as the TODO above is resolved + if (!sidebar) return; + // If the sibear peak hasn't increased, that mean that there are no more + // activities, and we can stop calling new subscriptions. + // XXX This is hacky! We need to know excatly and reactively how many + // activities there are, we probably want to denormalize this number + // dirrectly into card and board documents. + const nextPeakBefore = sidebar.callFirstWith(null, 'getNextPeak'); + sidebar.calculateNextPeak(); + const nextPeakAfter = sidebar.callFirstWith(null, 'getNextPeak'); + if (nextPeakBefore === nextPeakAfter) { + sidebar.callFirstWith(null, 'resetNextPeak'); + } + }); + } }); }, loadNextPage() { diff --git a/client/components/boards/boardBody.jade b/client/components/boards/boardBody.jade index edeb25464..6dce982d9 100644 --- a/client/components/boards/boardBody.jade +++ b/client/components/boards/boardBody.jade @@ -18,7 +18,7 @@ template(name="boardBody") else .board-wrapper(class=currentBoard.colorClass) +sidebar - .board-canvas.js-swimlanes( + .board-canvas.js-swimlanes.dragscroll( class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}" class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}" class="{{#if draggingActive.get}}is-dragging-active{{/if}}") diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index f02b69fdd..c0aac7301 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -1,5 +1,6 @@ import { ReactiveCache } from '/imports/reactiveCache'; import { TAPi18n } from '/imports/i18n'; +import dragscroll from '@wekanteam/dragscroll'; const subManager = new SubsManager(); const { calculateIndex } = Utils; @@ -219,6 +220,7 @@ BlazeComponent.extendComponent({ boardComponent.openNewListForm(); } + dragscroll.reset(); Utils.setBackgroundImage(); }, diff --git a/client/components/boards/boardColors.css b/client/components/boards/boardColors.css index 0daf6c828..29aebd06b 100644 --- a/client/components/boards/boardColors.css +++ b/client/components/boards/boardColors.css @@ -718,13 +718,7 @@ .board-color-dark#header-quick-access ul li.current { border-bottom: 4px solid #476483; } - -/* Board Wrapper background fix for dark theme */ -.board-color-dark.board-wrapper { - background-color: #2c3e50; -} - - +.board-color-dark .ui-sortable, .board-color-dark .swimlane, .board-color-dark .swimlane >.swimlane-header-wrap, .board-color-dark .swimlane >.list.js-list, @@ -893,7 +887,7 @@ .board-color-relax#header-quick-access ul li.current { border-bottom: 4px solid #3dd37e; } -.board-color-relax.board-wrapper { +.board-color-relax .ui-sortable { background-color: #a7e366; } .board-color-relax .list-header { @@ -1060,7 +1054,7 @@ .board-color-clearblue .toggle-switch:checked ~ .toggle-label:after { background-color: #197ddc; } -.board-color-clearblue.board-wrapper { +.board-color-clearblue .board-canvas { background: linear-gradient(135deg, #499bea 0%, #00aecc 100%); } .board-color-clearblue .swimlane { @@ -1308,7 +1302,7 @@ .board-color-natural#header-quick-access { background-color: #2d392b; } -.board-color-natural.board-wrapper { +.board-color-natural .ui-sortable { background-color: #dedede; } .board-color-natural .swimlane .swimlane-header-wrap { @@ -1439,7 +1433,7 @@ height: 21px; background: #f7f7f7; } -.board-color-modern.board-wrapper { +.board-color-modern .board-canvas { background: #f5f5f5; } .board-color-modern .swimlane { @@ -1737,7 +1731,7 @@ line-height: 0.8em; padding-top: 10px; } -.board-color-moderndark.board-wrapper { +.board-color-moderndark .board-canvas { background: #2a2a2a; } .board-color-moderndark .swimlane .swimlane-header-wrap { @@ -2116,7 +2110,7 @@ color: #fff !important; } */ -.board-color-exodark.board-wrapper { +.board-color-exodark .board-canvas { background: #222; /* font-family: Poppins; */ } @@ -2258,12 +2252,8 @@ color: #fff; } -.board-color-cleandark#header-quick-access { - background: #23232B; -} - -.board-color-cleandark#header { - background: #23232B; +.board-color-cleandark { + background: #0A0A14 } .board-color-cleandark#header ul li, @@ -2276,126 +2266,30 @@ } .board-color-cleandark#header-main-bar h1 { - font-size: 18px; + font-size: 16px; font-weight: 500; line-height: 24px !important; text-align: left; color: rgba(255, 255, 255, 1); } -.board-color-cleandark .list-header-add { - background: #23232B !important; - border-radius: 12px; - margin-top: 10px; - padding: 8px; - margin-right: 8px; - color: #FFFFFF; - display: flex; - align-items: center; - justify-content: center; -} - .board-color-cleandark#header ul li.current, .board-color-cleandark#header-quick-access ul li.current { color: rgba(255, 255, 255, 85%); } -.board-color-cleandark#header #header-main-bar { - background: #23232B; - color: rgba(255, 255, 255, 85%); -} - .board-color-cleandark .swimlane-header { - font-size: 18px; + font-size: 16px; font-weight: 500; line-height: 24px; text-align: left; color: rgba(255, 255, 255, 1); } -.board-color-cleandark.board-wrapper { +.board-color-cleandark .board-canvas { background: #0A0A14; } -.board-color-cleandark .list { - background: none; - border-left: none; -} - -.board-color-cleandark .fa { - color: #FFFFFF; -} - -.board-color-cleandark .list .list-header { - background: none; - color: #FFFFFF; - font-size: 16px; -} - -.board-color-cleandark .list .list-header .list-header-name { - background: none; - color: #FFFFFF; - font-size: 16px; -} - -.board-color-cleandark .list .list-header { - border-bottom: none; - display: flex; - justify-content: space-between; - align-items: center; -} - -.board-color-cleandark .list .list-header .list-header-menu .fa { - color: #FFFFFF; -} - -.board-color-cleandark .card-label { - border-radius: 18px; - margin-top: 6px; -} - -.board-color-cleandark .list .list-header .list-header-menu .list-header-plus-top { - color: #FFFFFF; - background: #FF6D00; - padding: 8px; - border-radius: 12px; -} - -.board-color-cleandark .list .list-header .list-header-menu .list-header-plus-top:hover { - background: #d25b02; -} - -.board-color-cleandark .open-minicard-composer { - width: 16px; - height: 22px; - padding: 8px; - display: flex !important; - justify-content: center; - align-items: center; - border-radius: 12px !important; -} - -.board-color-cleandark .open-minicard-composer:hover { - background: #444455 !important; -} - -.board-color-cleandark .open-minicard-composer:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark .open-minicard-composer .fa { - width: min-content; - color: rgba(255, 255, 255, 85%); -} - -.board-color-cleandark .open-minicard-composer i { - margin-right: 0 !important; -} - -.board-color-cleandark .swimlane { - background: none; -} - .board-color-cleandark .sidebar .sidebar-shadow { background: rgba(35, 35, 43, 1) !important; box-shadow: none; @@ -2427,112 +2321,20 @@ border: none; } -.board-color-cleandark .minicard { - background: #23232B; - border-radius: 12px; - color: #FFFFFF; - font-size: 18px; - font-weight: 400; - line-height: 24px; - text-align: left; - padding: 12px; -} - -.board-color-cleandark .minicard:hover, -.board-color-cleandark .is-selected .minicard { - background: rgba(46, 46, 57, 1) !important; -} - -.board-color-cleandark .minicard .date, -.board-color-cleandark .minicard .end-date { - font-size: 16px; - font-weight: 400; - line-height: 24px; - text-align: left; - margin-bottom: 10px; -} - -.board-color-cleandark .minicard .date a, -.board-color-cleandark .minicard .end-date, -.board-color-cleandark .card-details .card-date { - padding: 4px 8px 4px 8px; - font-size: 16px; - font-weight: 400; - line-height: 24px; - text-align: left; - color: #FFFFFF; -} - -.board-color-cleandark .minicard .end-date, -.board-color-cleandark .minicard .due-date, -.board-color-cleandark .card-details .card-date { - background: #444455; - border-radius: 8px; -} - -.board-color-cleandark .minicard .end-date:hover, -.board-color-cleandark .minicard .due-date:hover, -.board-color-cleandark .card-details .card-date:hover { - background: rgba(68, 68, 85, 0.73); - border-radius: 8px; -} - -.board-color-cleandark .minicard .date .current, -.board-color-cleandark .minicard .current, -.board-color-cleandark .card-details .current { - background: #009B64; - border-radius: 8px; -} - -.board-color-cleandark .minicard .date .current:hover, -.board-color-cleandark .minicard .current:hover, -.board-color-cleandark .card-details .current:hover { - background: rgba(0, 155, 100, 0.73); - border-radius: 8px; -} - -.board-color-cleandark .minicard .date .due, -.board-color-cleandark .minicard .due, -.board-color-cleandark .card-details .due { - background: #CC003A; - border-radius: 8px; -} - -.board-color-cleandark .minicard .date .due:hover, -.board-color-cleandark .minicard .due:hover, -.board-color-cleandark .card-details .due:hover { - background: rgba(204, 0, 58, 0.73); - border-radius: 8px; -} - .board-color-cleandark .card-details { background: #23232B; border-radius: 20px; box-shadow: none; } -.board-color-cleandark .minicard-assignees { - border-bottom: none !important; -} - .board-color-cleandark .card-details-item a { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; color: rgba(255, 255, 255, 0.5); } -.board-color-cleandark .card-details-header { - background: #2E2E39 !important; - color: rgba(255, 255, 255, 1); - font-size: 24px; - font-weight: 600; - line-height: 28px; - text-align: left; - border-bottom: none !important; -} - .board-color-cleandark .add-assignee { box-shadow: none !important; } @@ -2574,20 +2376,12 @@ margin-left: 4px; } -.board-color-cleandark .card-details .card-details-item-title { - font-size: 18px; - font-weight: 500; - line-height: 24px; - text-align: left; - color: rgba(255, 255, 255, 1); -} - .board-color-cleandark .card-details hr { background: rgba(255, 255, 255, 0.05); } .board-color-cleandark .card-details-canvas { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -2600,17 +2394,6 @@ background: rgba(46, 46, 57, 1); } -.board-color-cleandark.pop-over .header { - border-bottom: none; - background: inherit; - - font-size: 18px; - font-weight: 500; - line-height: 24px; - text-align: left; - color: rgba(255, 255, 255, 1);; -} - .board-color-cleandark.pop-over .pop-over-list, .board-color-cleandark.pop-over .content { font-size: 16px; @@ -2717,7 +2500,7 @@ } .board-color-cleandark .activity-desc { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -2749,7 +2532,7 @@ } .board-color-cleandark textarea { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -2759,25 +2542,12 @@ border-radius: 12px !important; } -.board-color-cleandark .minicard-composer-textarea { - background: #23232B !important; -} - -.board-color-cleandark .minicard-composer:hover { - background: #23232B !important; -} - .board-color-cleandark textarea::placeholder { color: rgba(255, 255, 255, 0.85) !important; } -.board-color-cleandark textarea:focus { - border: none !important; - box-shadow: none; -} - .board-color-cleandark input { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -2792,7 +2562,7 @@ } .board-color-cleandark select { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -2857,29 +2627,6 @@ background: none; } -.board-color-cleandark .minicard .badges .badge.is-finished { - background: #009B64 !important; - border-radius: 8px; -} - -.board-color-cleandark .swimlane-height-apply { - background: #FFFFFF !important; - border-radius: 12px !important; - color: #0A0A14 !important; -} - -.board-color-cleandark .swimlane-height-apply:hover { - background: rgba(255, 255, 255, 0.85) !important; -} - -.board-color-cleandark .swimlane .swimlane-header-wrap { - background-color: #23232B; -} - -.board-color-cleandark .sidebar-list-item-description { - color: #FFFFFF; -} - .board-color-cleandark .sidebar .sidebar-content h3, .board-color-cleandark .sidebar .sidebar-content h2, .board-color-cleandark .sidebar .sidebar-content h1 { @@ -2898,6 +2645,10 @@ width: 18px; } +.board-color-cleandark .sidebar-list-item-description { + color: #FFFFFF; +} + .board-color-cleandark #cards .materialCheckBox.is-checked { border-bottom: 2px solid #FFFFFF; border-right: 2px solid #FFFFFF; @@ -2909,9 +2660,25 @@ margin-top: 3px; } -.board-color-cleanlight#header-quick-access { - background: #f8f8f9; - color: rgba(10, 10, 20, 0.85); +.board-color-cleandark .allBoards { + white-space: nowrap; +} + +.board-color-cleandark#header-quick-access ul.header-quick-access-list li { + display: inline-flex; + align-items: center; + padding-bottom: 4px; + padding-top: 4px; + margin-right: 10px; +} + +.board-color-cleandark#header-quick-access ul.header-quick-access-list { + display: flex; + align-items: center; +} + +.board-color-cleanlight { + background: #E0E0E0; } .board-color-cleanlight .board-header-btn { @@ -2930,15 +2697,6 @@ color: rgba(10, 10, 20, 0.85) !important; } -.board-color-cleanlight#header { - background: rgba(255, 255, 255, 0.85); -} - -.board-color-cleanlight #header-main-bar { - background: #f8f8f9 !important; - color: rgba(10, 10, 20, 0.85) !important; -} - .board-color-cleanlight#header ul li, .board-color-cleanlight#header-quick-access ul li { color: rgba(10, 10, 20, 0.5) !important; @@ -2956,23 +2714,16 @@ } .board-color-cleanlight #header-main-bar h1 { - font-size: 18px; + font-size: 16px; font-weight: 500; line-height: 24px !important; text-align: left; color: rgba(10, 10, 20, 1) !important; } -.board-color-cleanlight .list-header-add { +.board-color-cleanlight { background: #FFFFFF !important; - border-radius: 12px; - margin-top: 10px; - padding: 8px; - margin-right: 8px; color: #000000; - display: flex; - align-items: center; - justify-content: center; } .board-color-cleanlight#header ul li.current, @@ -2980,101 +2731,201 @@ color: rgba(10, 10, 20, 0.85) !important; } -.board-color-cleanlight#header #header-main-bar { - background: #23232B; - color: rgba(255, 255, 255, 85%); -} - .board-color-cleanlight .swimlane-header { - font-size: 18px; + font-size: 16px; font-weight: 500; line-height: 24px; text-align: left; color: rgba(10, 10, 20, 1); } -.board-color-cleanlight.board-wrapper { +.board-color-cleanlight .board-canvas { background: #FFFFFF; } -.board-color-cleanlight .list { - background: none; - border-left: none; -} - .board-color-cleanlight .fa { color: rgba(10, 10, 20, 1); } -.board-color-cleanlight .list .list-header { - background: none; +.board-color-cleandark .fa { color: #FFFFFF; - font-size: 16px; } -.board-color-cleanlight .list .list-header .list-header-name { +/*fdsfdsfdsfdsfsdddddddddd */ + +.board-color-cleanlight .list, +.board-color-cleandark .list { background: none; - color: rgba(10, 10, 20, 1); - font-size: 16px; + border-left: none; } -.board-color-cleanlight .list .list-header { +.board-color-cleanlight .list .list-header, +.board-color-cleandark .list .list-header { border-bottom: none; display: flex; justify-content: space-between; align-items: center; + font-size: 16px; + background: none; } -.board-color-cleanlight .list .list-header .list-header-menu .fa { +.board-color-cleanlight .list .list-header-name { color: rgba(10, 10, 20, 1); } -.board-color-cleanlight .card-label { - border-radius: 18px; - margin-top: 6px; - border: none; +.board-color-cleandark .list .list-header-name { + color: #FFFFFF; } -.board-color-cleanlight .list .list-header .list-header-menu .list-header-plus-top { +.board-color-cleanlight .list:first-child, +.board-color-cleandark .list:first-child { + margin-right: -32px; +} + +.board-color-cleanlight .list .list-header .list-header-menu, +.board-color-cleandark .list .list-header .list-header-menu { + display: flex; + gap: 8px; + align-items: center; +} + +.board-color-cleanlight .list .list-header .list-header-menu .js-open-list-menu , +.board-color-cleandark .list .list-header .list-header-menu .js-open-list-menu { + font-size: 16px !important; +} + +.board-color-cleanlight .list .list-header .list-header-menu a, +.board-color-cleandark .list .list-header .list-header-menu a { + margin: 0 !important; +} + +.board-color-cleanlight .list .list-header .list-header-menu .list-header-plus-top, +.board-color-cleandark .list .list-header .list-header-menu .list-header-plus-top { color: #FFFFFF; background: #FF6D00; padding: 8px; border-radius: 12px; + font-size: 16px !important; } -.board-color-cleanlight .list .list-header .list-header-menu .list-header-plus-top:hover { +.board-color-cleanlight .list .list-header .list-header-menu .list-header-plus-top:hover, +.board-color-cleandark .list .list-header .list-header-menu .list-header-plus-top:hover { background: #d25b02; } -.board-color-cleanlight .open-minicard-composer { - width: 16px; - height: 22px; +.board-color-cleanlight .list .list-header .list-header-menu .js-collapse, +.board-color-cleandark .list .list-header .list-header-menu .js-collapse { + display: none; +} + +.board-color-cleanlight .list-header-add, +.board-color-cleandark .list-header-add { + border-radius: 12px; + margin-top: 18px; padding: 8px; - display: flex !important; - justify-content: center; + margin-right: 8px; + display: flex; align-items: center; + justify-content: center; + margin-left: 10px; +} + +.board-color-cleanlight .list-header-add:hover { + background: rgba(227, 227, 230, 1); + color: rgba(10, 10, 20, 1); + border-radius: 8px; + cursor: pointer; +} + +.board-color-cleandark .list-header-add:hover { + background: rgba(255, 255, 255, 0.1); + color: #FFFFFF; + border-radius: 8px; + cursor: pointer; +} + +.board-color-cleanlight .list-header-add a:hover i { + color: #FFFFFF !important; +} + +.board-color-cleandark .list-header-add { + background: #23232B !important; + color: #FFFFFF !important; +} + +.board-color-cleanlight .card-label, +.board-color-cleandark .card-label { + border-radius: 18px; + margin-top: 6px; + margin-right: 8px; + border: none; + padding: 4px 12px; +} + +.board-color-cleanlight .swimlane, +.board-color-cleandark .swimlane { + background: none; + gap: 32px; +} + +.board-color-cleanlight .swimlane-height-apply, +.board-color-cleandark .swimlane-height-apply { border-radius: 12px !important; } -.board-color-cleanlight .open-minicard-composer:hover { - background:rgba(180, 180, 180, 1) !important; +.board-color-cleandark .swimlane-height-apply { + background: #FFFFFF !important; + color: #0A0A14 !important; } -.board-color-cleanlight .open-minicard-composer:hover i { - color: #000000 !important; +.board-color-cleanlight .swimlane-height-apply { + background: rgba(23, 23, 28, 1) !important; + color: rgba(255, 255, 255, 0.85) !important; } -.board-color-cleanlight .open-minicard-composer .fa { - width: min-content; - color: rgba(10, 10, 20, 1); +.board-color-cleandark .swimlane-height-apply:hover { + background: rgba(255, 255, 255, 0.85) !important; } -.board-color-cleanlight .open-minicard-composer i { - margin-right: 0 !important; +.board-color-cleanlight .swimlane-height-apply:hover { + background: rgba(227, 227, 230, 1) !important; } -.board-color-cleanlight .swimlane { - background: none; +.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header, +.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header, +.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header-menu .fa, +.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header-menu .fa { + font-size: 16px !important; +} + +.board-color-cleanlight .swimlane .swimlane-header-wrap { + background-color: #F1F1F3; +} + +.board-color-cleandark .swimlane .swimlane-header-wrap { + background-color: #2E2E39; +} + +.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header-plus-icon, +.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header-plus-icon { + margin-left: 14px; +} + +.board-color-cleanlight .swimlane .swimlane-header-wrap .list-composer, +.board-color-cleandark .swimlane .swimlane-header-wrap .list-composer { + display: flex; + gap: 12px; + margin-left: 20px; +} + +.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header .viewer p, +.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header .viewer p { + margin-bottom: 0; +} + +.board-color-cleanlight .js-toggle-desktop-drag-handles, +.board-color-cleandark .js-toggle-desktop-drag-handles { + display: none; } .board-color-cleanlight .sidebar .sidebar-shadow { @@ -3108,115 +2959,63 @@ border: none; } -.board-color-cleanlight .minicard { - background: rgba(248, 248, 249, 1); - border-radius: 12px; - color: rgba(10, 10, 20, 0.85); - font-size: 18px; - font-weight: 400; - line-height: 24px; - text-align: left; - padding: 12px; -} - -.board-color-cleanlight .minicard:hover, -.board-color-cleanlight .is-selected .minicard { - background: rgba(241, 241, 243, 1) !important; -} - -.board-color-cleanlight .minicard .date, -.board-color-cleanlight .minicard .end-date { - font-size: 16px; - font-weight: 400; - line-height: 24px; - text-align: left; - margin-bottom: 10px; -} - -.board-color-cleanlight .minicard .date a, -.board-color-cleanlight .minicard .end-date, -.board-color-cleanlight .card-details .card-date { - padding: 4px 8px 4px 8px; - font-size: 16px; - font-weight: 400; - line-height: 24px; - text-align: left; - color: rgba(255, 255, 255, 1); -} - -.board-color-cleanlight .minicard .end-date, -.board-color-cleanlight .minicard .due-date, -.board-color-cleanlight .card-details .card-date { - background: rgba(227, 227, 230, 1); - color: rgba(10, 10, 20, 1) !important; - border-radius: 8px; -} - -.board-color-cleanlight .minicard .end-date:hover, -.board-color-cleanlight .minicard .due-date:hover, -.board-color-cleanlight .card-details .card-date:hover { - background: rgba(207, 207, 210, 1); - border-radius: 8px; -} - -.board-color-cleanlight .minicard .date .current, -.board-color-cleanlight .minicard .current, -.board-color-cleanlight .card-details .current { - background: #009B64; - border-radius: 8px; - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleanlight .minicard .date .current:hover, -.board-color-cleanlight .minicard .current:hover, -.board-color-cleanlight .card-details .current:hover { - background: rgba(0, 155, 100, 0.73); - border-radius: 8px; - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleanlight .minicard .date .due, -.board-color-cleanlight .minicard .due, -.board-color-cleanlight .card-details .due { - background: #CC003A; - border-radius: 8px; - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleanlight .minicard .date .due:hover, -.board-color-cleanlight .minicard .due:hover, -.board-color-cleanlight .card-details .due:hover { - background: rgba(204, 0, 58, 0.73); - border-radius: 8px; - color: rgba(255, 255, 255, 1) !important; -} - .board-color-cleanlight .card-details { background: rgba(248, 248, 249, 1); border-radius: 20px; box-shadow: none; } -.board-color-cleanlight .minicard-assignees { - border-bottom: none !important; -} - .board-color-cleanlight .card-details-item a { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; color: rgba(10, 10, 20, 0.5); } -.board-color-cleanlight .card-details-header { - background: rgba(241, 241, 243, 1) !important; - color: rgba(10, 10, 20, 1); - font-size: 24px; +.board-color-cleanlight .card-details-header, +.board-color-cleandark .card-details-header { + font-size: 24px !important; font-weight: 600; line-height: 28px; text-align: left; border-bottom: none !important; + padding: 12px 20px !important; +} + +.board-color-cleanlight .card-details-header { + background: rgba(241, 241, 243, 1); + color: rgba(10, 10, 20, 1); +} + +.board-color-cleandark .card-details-header { + background: #2E2E39 !important; + color: rgba(255, 255, 255, 1); +} + +.board-color-cleanlight .card-details-header .card-details-title, +.board-color-cleandark .card-details-header .card-details-title { + font-size: 24px !important; +} + +.board-color-cleanlight .card-details .card-details-item-title, +.board-color-cleandark .card-details .card-details-item-title { + display: flex; + gap: 8px; + align-items: center; + + font-size: 16px; + font-weight: 500; + line-height: 24px; + text-align: left; +} + +.board-color-cleanlight .card-details .card-details-item-title { + color: rgba(10, 10, 20, 1); +} + +.board-color-cleandark .card-details .card-details-item-title { + color: rgba(255, 255, 255, 1); } .board-color-cleanlight .add-assignee { @@ -3260,20 +3059,12 @@ margin-left: 4px; } -.board-color-cleanlight .card-details .card-details-item-title { - font-size: 18px; - font-weight: 500; - line-height: 24px; - text-align: left; - color: rgba(10, 10, 20, 1); -} - .board-color-cleanlight .card-details hr { background: rgba(23, 23, 28, 0.05); } .board-color-cleanlight .card-details-canvas { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -3286,17 +3077,27 @@ background: rgba(241, 241, 243, 1); } -.board-color-cleanlight.pop-over .header { +.board-color-cleanlight.pop-over .header, +.board-color-cleandark.pop-over .header { + border-radius: 12px 12px 0 0; border-bottom: none; background: inherit; - font-size: 18px; + font-size: 16px; font-weight: 500; line-height: 24px; text-align: left; +} + +.board-color-cleanlight.pop-over .header { color: rgba(10, 10, 20, 1); } + +.board-color-cleandark.pop-over .header { + color: rgba(255, 255, 255, 1);; +} + .board-color-cleanlight.pop-over .pop-over-list, .board-color-cleanlight.pop-over .content { font-size: 16px; @@ -3410,7 +3211,7 @@ } .board-color-cleanlight .activity-desc { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -3457,7 +3258,7 @@ } .board-color-cleanlight textarea { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -3467,25 +3268,18 @@ border-radius: 12px !important; } -.board-color-cleanlight .minicard-composer-textarea { - background: #f8f8f9 !important; -} - -.board-color-cleanlight .minicard-composer:hover { - background: #f8f8f9 !important; -} - .board-color-cleanlight textarea::placeholder { color: rgba(10, 10, 20, 0.5) !important; } -.board-color-cleanlight textarea:focus { +.board-color-cleanlight textarea:focus, +.board-color-cleandark textarea:focus { border: none !important; box-shadow: none; } .board-color-cleanlight input { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -3499,8 +3293,14 @@ color: rgba(10, 10, 20, 0.5) !important; } +.board-color-cleanlight input:focus, +.board-color-cleandark input:focus { + border: none !important; + box-shadow: none !important; +} + .board-color-cleanlight select { - font-size: 18px; + font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; @@ -3565,29 +3365,6 @@ background: none; } -.board-color-cleanlight .minicard .badges .badge.is-finished { - background: #009B64 !important; - border-radius: 8px; -} - -.board-color-cleanlight .minicard .badges .badge.is-finished .badge-icon { - color: #FFFFFF; -} - -.board-color-cleanlight .swimlane-height-apply { - background: rgba(23, 23, 28, 1) !important; - border-radius: 12px !important; - color: rgba(255, 255, 255, 0.85) !important; -} - -.board-color-cleanlight .swimlane-height-apply:hover { - background: rgba(227, 227, 230, 1) !important; -} - -.board-color-cleanlight .swimlane .swimlane-header-wrap { - background-color: rgba(248, 248, 249, 1); -} - .board-color-cleanlight .sidebar-list-item-description { color: rgba(10, 10, 20, 0.85); } @@ -3620,3 +3397,296 @@ margin-left: 3px; margin-top: 3px; } + +.board-color-cleanlight .allBoards { + white-space: nowrap; +} + +.board-color-cleanlight#header-quick-access, +.board-color-cleandark#header-quick-access { + padding: 10px 20px; + padding-top: 12px !important; + gap: 20px; +} + +.board-color-cleandark#header-quick-access { + background: #2E2E39 !important; +} + +.board-color-cleanlight#header-quick-access { + background: #F1F1F3 !important; + color: rgba(10, 10, 20, 0.85); +} + +.board-color-cleanlight#header-quick-access ul.header-quick-access-list li a .viewer, +.board-color-cleandark#header-quick-access ul.header-quick-access-list li a .viewer { + max-width: 400px; + text-overflow: ellipsis; + overflow: hidden; + display: inline-flex; + align-items: center; +} + +.board-color-cleanlight#header-quick-access ul.header-quick-access-list li a .viewer p, +.board-color-cleandark#header-quick-access ul.header-quick-access-list li a .viewer p { + margin-bottom: 0; + overflow: hidden; + text-overflow: ellipsis; +} + +.board-color-cleanlight#header-quick-access ul.header-quick-access-list li { + display: inline-flex; + align-items: center; + padding-bottom: 4px; + padding-top: 4px; + margin-right: 10px; +} + +.board-color-cleanlight#header-quick-access ul.header-quick-access-list { + display: flex; + align-items: center; +} + +.board-color-cleanlight #header-main-bar, +.board-color-cleanlight#header { + background: #F1F1F3 !important; + color: rgba(10, 10, 20, 0.85) !important; +} + +.board-color-cleandark #header-main-bar, +.board-color-cleandark#header { + background: #2E2E39 !important; + color: #FFFFFF; +} + +.board-color-cleanlight .list-body .open-minicard-composer, +.board-color-cleandark .list-body .open-minicard-composer { + display: none !important; +} + +.board-color-cleanlight .minicard, +.board-color-cleandark .minicard { + border-radius: 12px; + font-size: 16px; + font-weight: 400; + line-height: 24px; + text-align: left; + padding: 12px; +} + +.board-color-cleanlight .minicard { + background: rgba(248, 248, 249, 1); + color: rgba(10, 10, 20, 0.85); +} + +.board-color-cleandark .minicard { + color: #FFFFFF; + background: #23232B; +} + +.board-color-cleanlight .minicard .minicard-details-menu, +.board-color-cleandark .minicard .minicard-details-menu { + font-size: 16px !important; +} + +.board-color-cleanlight .minicard .date, +.board-color-cleandark .minicard .date, +.board-color-cleanlight .minicard .end-date, +.board-color-cleandark .minicard .end-date { + font-size: 16px; + font-weight: 400; + line-height: 24px; + text-align: left; + margin-bottom: 10px; +} + +.board-color-cleanlight .minicard .date a, +.board-color-cleandark .minicard .date a, +.board-color-cleanlight .minicard .end-date, +.board-color-cleandark .minicard .end-date, +.board-color-cleanlight .card-details .card-date, +.board-color-cleandark .card-details .card-date { + padding: 4px 8px 4px 8px; + font-size: 16px; + font-weight: 400; + line-height: 24px; + text-align: left; + color: rgba(255, 255, 255, 1); +} + +.board-color-cleanlight .minicard .end-date, +.board-color-cleandark .minicard .end-date, +.board-color-cleanlight .minicard .due-date, +.board-color-cleandark .minicard .due-date, +.board-color-cleanlight .card-details .card-date, +.board-color-cleandark .card-details .card-date { + border-radius: 8px; +} + +.board-color-cleanlight .minicard .end-date, +.board-color-cleanlight .minicard .due-date, +.board-color-cleanlight .card-details .card-date { + background: rgba(227, 227, 230, 1); + color: rgba(10, 10, 20, 1) !important; +} + +.board-color-cleandark .minicard .end-date, +.board-color-cleandark .minicard .due-date, +.board-color-cleandark .card-details .card-date { + background: #444455; +} + +.board-color-cleandark .minicard .end-date:hover, +.board-color-cleandark .minicard .due-date:hover, +.board-color-cleandark .card-details .card-date:hover { + background: rgba(68, 68, 85, 0.73); +} + +.board-color-cleanlight .minicard .end-date:hover, +.board-color-cleanlight .minicard .due-date:hover, +.board-color-cleanlight .card-details .card-date:hover { + background: rgba(207, 207, 210, 1); +} + +.board-color-cleanlight .minicard .date .current, +.board-color-cleandark .minicard .date .current, +.board-color-cleanlight .minicard .current, +.board-color-cleandark .minicard .current, +.board-color-cleanlight .card-details .current, +.board-color-cleandark .card-details .current { + background: #009B64; + border-radius: 8px; + color: rgba(255, 255, 255, 1) !important; +} + +.board-color-cleandark .minicard .date .current:hover, +.board-color-cleanlight .minicard .date .current:hover, +.board-color-cleandark .minicard .current:hover, +.board-color-cleanlight .minicard .current:hover, +.board-color-cleandark .card-details .current:hover, +.board-color-cleanlight .card-details .current:hover { + background: rgba(0, 155, 100, 0.73); + color: rgba(255, 255, 255, 1) !important; +} + +.board-color-cleanlight .minicard .date .due, +.board-color-cleandark .minicard .date .due, +.board-color-cleanlight .minicard .due, +.board-color-cleandark .minicard .due, +.board-color-cleanlight .card-details .due, +.board-color-cleandark .card-details .due { + background: #CC003A; + border-radius: 8px; + color: rgba(255, 255, 255, 1) !important; +} + +.board-color-cleanlight .card-details .due:hover, +.board-color-cleanlight .minicard .date .due:hover, +.board-color-cleanlight .minicard .due:hover, +.board-color-cleandark .minicard .due:hover, +.board-color-cleandark .minicard .date .due:hover, +.board-color-cleandark .card-details .due:hover { + background: rgba(204, 0, 58, 0.73); + color: rgba(255, 255, 255, 1) !important; +} + +.board-color-cleanlight .minicard-assignees, +.board-color-cleandark .minicard-assignees { + border-bottom: none !important; +} + +.board-color-cleanlight .minicard-composer-textarea { + background: #f8f8f9 !important; +} + +.board-color-cleandark .minicard-composer-textarea { + background: #23232B !important; +} + +.board-color-cleanlight .minicard-composer:hover { + background: #f8f8f9 !important; +} + +.board-color-cleandark .minicard-composer:hover { + background: #23232B !important; +} + +.board-color-cleanlight .minicard .badges .badge.is-finished, +.board-color-cleandark .minicard .badges .badge.is-finished { + background: #009B64 !important; + border-radius: 8px; +} + +.board-color-cleanlight .minicard .badges .badge.is-finished .badge-icon { + color: #FFFFFF; +} + +.board-color-cleanlight .card-details-item-customfield:has(.checklist-item), +.board-color-cleandark .card-details-item-customfield:has(.checklist-item) { + display: flex !important; + align-items: center; + gap: 8px; +} + +.board-color-cleanlight .card-details-item-customfield:has(.checklist-item) div, +.board-color-cleandark .card-details-item-customfield:has(.checklist-item) div { + padding-right: 0 !important; +} + +.board-color-cleanlight .card-details .card-details-items .card-details-item.custom-fields, +.board-color-cleanlight .card-details .card-details-items .card-details-item.custom-fields { + margin-left: auto; + flex-grow: 0; + border-radius: 12px; +} + +.board-color-cleanlight .card-details-item-customfield:has(.checklist-item) h3, +.board-color-cleandark .card-details-item-customfield:has(.checklist-item) h3 { + width: min-content !important; + display: flex; + align-items: center; + gap: 8px; + margin: 0 !important; +} + +.board-color-cleanlight .new-description .fa, +.board-color-cleandark .new-description .fa { + display: none; +} + +.board-color-cleanlight .card-details-left .viewer p { + color: rgba(10, 10, 20, 0.85); +} + +.board-color-cleandark .card-details-left .viewer p { + color: #FFFFFF; +} + +.board-color-cleanlight .card-details-left .js-open-inlined-form, +.board-color-cleandark .card-details-left .js-open-inlined-form { + float: right; +} + +.board-color-cleanlight .new-comment .fa, +.board-color-cleandark .new-comment .fa { + display: none; +} + +.board-color-cleanlight .pop-over-list li > a, +.board-color-cleandark .pop-over-list li > a { + font-weight: 500; +} + +.board-color-cleanlight .pop-over-list li > a i, +.board-color-cleandark .pop-over-list li > a i { + margin-right: 6px !important; +} + +.board-color-cleanlight .pop-over .quiet { + margin-left: 100px !important; +} + +.board-color-cleandark .minicard:hover:not(.minicard-composer), +.board-color-cleandark .is-selected .minicard, .draggable-hover-card .minicard { + background: #23232B; +} diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index 7611e705a..22408b3c6 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -6,37 +6,6 @@ const DOWNCLS = 'fa-sort-down'; const UPCLS = 'fa-sort-up'; */ const sortCardsBy = new ReactiveVar(''); -Template.boardMenuPopup.events({ - 'click .js-rename-board': Popup.open('boardChangeTitle'), - 'click .js-custom-fields'() { - Sidebar.setView('customFields'); - Popup.back(); - }, - 'click .js-open-archives'() { - Sidebar.setView('archives'); - Popup.back(); - }, - 'click .js-change-board-color': Popup.open('boardChangeColor'), - 'click .js-change-language': Popup.open('changeLanguage'), - 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() { - const currentBoard = Utils.getCurrentBoard(); - 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() { - const currentBoard = Utils.getCurrentBoard(); - Popup.back(); - Boards.remove(currentBoard._id); - FlowRouter.go('home'); - }), - 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'), - 'click .js-import-board': Popup.open('chooseBoardSource'), - 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'), - 'click .js-card-settings': Popup.open('boardCardSettings'), - 'click .js-minicard-settings': Popup.open('boardMinicardSettings'), -}); Template.boardChangeTitlePopup.events({ submit(event, templateInstance) { diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js index 23a9ce8b2..69a29b3c2 100644 --- a/client/components/boards/boardsList.js +++ b/client/components/boards/boardsList.js @@ -151,8 +151,8 @@ BlazeComponent.extendComponent({ } const currUser = ReactiveCache.getCurrentUser(); - let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : ''; - if (orgIdsUserBelongs && orgIdsUserBelongs != '') { + let orgIdsUserBelongs = currUser?.orgIdsUserBelongs() || ''; + if (orgIdsUserBelongs) { let orgsIds = orgIdsUserBelongs.split(','); // for(let i = 0; i < orgsIds.length; i++){ // query.$and[2].$or.push({'orgs.orgId': orgsIds[i]}); @@ -162,8 +162,8 @@ BlazeComponent.extendComponent({ query.$and[2].$or.push({ 'orgs.orgId': { $in: orgsIds } }); } - let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : ''; - if (teamIdsUserBelongs && teamIdsUserBelongs != '') { + let teamIdsUserBelongs = currUser?.teamIdsUserBelongs() || ''; + if (teamIdsUserBelongs) { let teamsIds = teamIdsUserBelongs.split(','); // for(let i = 0; i < teamsIds.length; i++){ // query.$or[2].$or.push({'teams.teamId': teamsIds[i]}); @@ -199,15 +199,12 @@ BlazeComponent.extendComponent({ }, boardMembers(boardId) { - let boardMembers = []; /* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214 const lists = ReactiveCache.getBoard(boardId) - let members = lists.members - members.forEach(member => { - boardMembers.push(member.userId); - }); - */ + const boardMembers = lists?.members.map(member => member.userId); return boardMembers; + */ + return []; }, isStarred() { diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade index fc597205a..5e1d41da1 100644 --- a/client/components/cards/attachments.jade +++ b/client/components/cards/attachments.jade @@ -117,8 +117,6 @@ template(name="attachmentActionsPopup") | {{_ 'remove-background-image'}} else | {{_ 'add-background-image'}} - p.attachment-storage - | {{versions.original.storage}} if $neq versions.original.storage "fs" a.js-move-storage-fs diff --git a/client/components/cards/attachments.js b/client/components/cards/attachments.js index 48b100cfe..391841602 100644 --- a/client/components/cards/attachments.js +++ b/client/components/cards/attachments.js @@ -39,7 +39,7 @@ Template.attachmentGallery.events({ 'click .js-rename': Popup.open('attachmentRename'), 'click .js-confirm-delete': Popup.afterConfirm('attachmentDelete', function() { Attachments.remove(this._id); - Popup.back(2); + Popup.back(); }), }); @@ -501,7 +501,7 @@ BlazeComponent.extendComponent({ if (name === DOMPurify.sanitize(name)) { Meteor.call('renameAttachment', this.data()._id, name); } - Popup.back(2); + Popup.back(); }, } ] diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index b86158522..9ee5b2fb0 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -5,7 +5,7 @@ template(name="cardDetails") +attachmentViewer - section.card-details.js-card-details(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}'): .card-details-canvas + section.card-details.js-card-details.nodragscroll(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}'): .card-details-canvas .card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}') +inlinedForm(classNames="js-card-details-title") +editCardTitleForm @@ -527,9 +527,10 @@ template(name="cardDetails") if currentBoard.allowsDescriptionText a.js-open-inlined-form(title="{{_ 'edit'}}" value=title) i.fa.fa-pencil-square-o - if getDescription - +viewer - = getDescription + a.js-open-inlined-form(title="{{_ 'edit'}}" value=title) + if getDescription + +viewer + = getDescription if (hasUnsavedValue 'cardDescription' _id) p.quiet | {{_ 'unsaved-description'}} diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 0351ee94f..eec4af51d 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -846,13 +846,15 @@ BlazeComponent.extendComponent({ 'click .js-palette-color'() { this.currentColor.set(this.currentData().color); }, - 'click .js-submit'() { + 'click .js-submit'(event) { + event.preventDefault(); this.currentCard.setColor(this.currentColor.get()); - Popup.close(); + Popup.back(); }, - 'click .js-remove-color'() { + 'click .js-remove-color'(event) { + event.preventDefault(); this.currentCard.setColor(null); - Popup.close(); + Popup.back(); }, }, ]; diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index 41f55292b..ff2721f34 100644 --- a/client/components/cards/checklists.jade +++ b/client/components/cards/checklists.jade @@ -22,7 +22,7 @@ template(name="checklists") i.fa.fa-plus template(name="checklistDetail") - .js-checklist.checklist + .js-checklist.checklist.nodragscroll +inlinedForm(classNames="js-edit-checklist-title" checklist = checklist) +editChecklistItemForm(checklist = checklist) else diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index b13ddc4b4..2cbeea2fc 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -1,5 +1,5 @@ template(name="minicard") - .minicard( + .minicard.nodragscroll( class="{{#if isLinkedCard}}linked-card{{/if}}" class="{{#if isLinkedBoard}}linked-board{{/if}}" class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}") diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js index a2d355b5f..8ee83d348 100644 --- a/client/components/cards/minicard.js +++ b/client/components/cards/minicard.js @@ -42,11 +42,7 @@ BlazeComponent.extendComponent({ const board = this.data().board(); let ret = false; if (board) { - ret = - board.allowsCreatorOnMinicard === null || - board.allowsCreatorOnMinicard === undefined || - board.allowsCreatorOnMinicard - ; + ret = board.allowsCreatorOnMinicard ?? false; } return ret; }, diff --git a/client/components/lists/list.css b/client/components/lists/list.css index 066fda4ca..18bd85cc2 100644 --- a/client/components/lists/list.css +++ b/client/components/lists/list.css @@ -7,17 +7,11 @@ border-left: 1px solid #ccc; padding: 0; float: left; - /* min-width: 100px; TODO(mark-i-m): hardcoded? */ - /*max-width: 270px;*/ - /* Reverted incomplete change list width: */ - /* https://github.com/wekan/wekan/issues/4558 */ - /* Orinal width: 270px. Changes not saved yet: */ - /*resize: both; - List width and height resizeable */ - /* overflow: auto; - List width and height resizeable */ +} +[id^="swimlane-"] .list:first-child { + min-width: 20px; } .list:first-child { - min-width: 20px; - margin-left: 5px; border-left: none; } .card-details + .list { @@ -48,7 +42,7 @@ } .list-header-add { flex: 0 0 auto; - padding: 20px 12px 4px; + padding: 12px; position: relative; min-height: 20px; } diff --git a/client/components/lists/list.js b/client/components/lists/list.js index a451c6b5b..c49f00780 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -196,7 +196,7 @@ BlazeComponent.extendComponent({ }, listWidth() { - const user = Meteor.user(); + const user = ReactiveCache.getCurrentUser(); const list = Template.currentData(); return user.getListWidth(list.boardId, list._id); }, diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index e724cdaa4..037d91fd9 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -1,20 +1,18 @@ template(name="listHeader") - .list-header.js-list-header( + .list-header.js-list-header.nodragscroll( class="{{#if limitToShowCardsCount}}list-header-card-count{{/if}}" class=colorClass) +inlinedForm +editListTitleForm else - unless isMiniScreen + if isMiniScreen + if currentList + a.list-header-left-icon.fa.fa-angle-left.js-unselect-list + else if collapsed a.js-collapse(title="{{_ 'uncollapse'}}") i.fa.fa-arrow-left.list-header-uncollapse-left i.fa.fa-arrow-right.list-header-uncollapse-right - if isMiniScreen - if currentList - a.list-header-left-icon.fa.fa-angle-left.js-unselect-list - unless isMiniScreen - if collapsed if showCardsCountForList cards.length br span.cardCount {{cardsCount}} @@ -28,7 +26,9 @@ template(name="listHeader") | ( span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}} |/#{wipLimit.value}) - unless isMiniScreen + if showCardsCountForList cards.length + span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}} + else div(class="{{#if collapsed}}list-rotated{{/if}}") h2.list-header-name( title="{{ moment modifiedAt 'LLL' }}" diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index a8f63900a..c50772e9a 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -362,7 +362,7 @@ BlazeComponent.extendComponent({ listWidthValue() { const list = Template.currentData(); const board = list.boardId; - return Meteor.user().getListWidth(board, list._id); + return ReactiveCache.getCurrentUser().getListWidth(board, list._id); }, events() { diff --git a/client/components/main/editor.css b/client/components/main/editor.css index 2d658fb7d..ac832de59 100644 --- a/client/components/main/editor.css +++ b/client/components/main/editor.css @@ -2,15 +2,15 @@ .inlined-form a.fa.fa-brands.fa-markdown { float: right; position: absolute; - top: -20px; + top: -10px; right: 60px; } .new-comment a.fa.fa-copy, .inlined-form a.fa.fa-copy { float: right; - position: absolute; - top: -20px; - right: 6px; + position: relative; + top: -10px; + right: 5px; } .js-inlined-form.viewer.btn-sm { position: absolute; diff --git a/client/components/sidebar/sidebar.css b/client/components/sidebar/sidebar.css index 4d0488b95..d50c2f933 100644 --- a/client/components/sidebar/sidebar.css +++ b/client/components/sidebar/sidebar.css @@ -16,9 +16,13 @@ } .sidebar-xmark { position: absolute; - right: 10px; - top: 5px; + right: 0px; + top: 0px; font-size: 25px; + padding: 10px; +} +.sidebar-xmark:hover { + background: rgba(0,0,0,0.15); } .sidebar .sidebar-content { padding: 12px; diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 254245654..f03f2c738 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -913,19 +913,11 @@ BlazeComponent.extendComponent({ }, allowsCreator() { - return ( - this.currentBoard.allowsCreator === null || - this.currentBoard.allowsCreator === undefined || - this.currentBoard.allowsCreator - ); + return this.currentBoard.allowsCreator ?? false; }, allowsCreatorOnMinicard() { - return ( - this.currentBoard.allowsCreatorOnMinicard === null || - this.currentBoard.allowsCreatorOnMinicard === undefined || - this.currentBoard.allowsCreatorOnMinicard - ); + return this.currentBoard.allowsCreatorOnMinicard ?? false; }, allowsMembers() { diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js index 89398faee..2b1547500 100644 --- a/client/components/swimlanes/swimlaneHeader.js +++ b/client/components/swimlanes/swimlaneHeader.js @@ -224,7 +224,7 @@ BlazeComponent.extendComponent({ swimlaneHeightValue() { const swimlane = this.currentData(); const board = swimlane.boardId; - return Meteor.user().getSwimlaneHeight(board, swimlane._id); + return ReactiveCache.getCurrentUser().getSwimlaneHeight(board, swimlane._id); }, events() { diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index bef6e8e33..f01ca7efd 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -1,5 +1,5 @@ template(name="swimlane") - .swimlane + .swimlane.nodragscroll +swimlaneHeader unless collapseSwimlane .swimlane.js-lists.js-swimlane(id="swimlane-{{_id}}" diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index fb190c157..09ff81db3 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -225,7 +225,7 @@ BlazeComponent.extendComponent({ }, swimlaneHeight() { - const user = Meteor.user(); + const user = ReactiveCache.getCurrentUser(); const swimlane = Template.currentData(); const height = user.getSwimlaneHeight(swimlane.boardId, swimlane._id); return height == -1 ? "auto" : (height + "px"); @@ -288,7 +288,7 @@ BlazeComponent.extendComponent({ Template.swimlane.helpers({ canSeeAddList() { - return Meteor.user().isBoardAdmin(); + return ReactiveCache.getCurrentUser().isBoardAdmin(); }, }); diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 22fd808b4..41fe3d051 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -325,7 +325,7 @@ Template.changeSettingsPopup.helpers({ }); }, startDayOfWeek() { - currentUser = Meteor.user(); + currentUser = ReactiveCache.getCurrentUser(); if (currentUser) { return currentUser.getStartDayOfWeek(); } else { @@ -343,7 +343,7 @@ Template.changeSettingsPopup.events({ return ret; }, 'click .js-toggle-desktop-drag-handles'() { - currentUser = Meteor.user(); + const currentUser = ReactiveCache.getCurrentUser(); if (currentUser) { Meteor.call('toggleDesktopDragHandles'); } else if (window.localStorage.getItem('showDesktopDragHandles')) { @@ -375,7 +375,7 @@ Template.changeSettingsPopup.events({ templateInstance.$('#start-day-of-week').val(), 10, ); - const currentUser = Meteor.user(); + const currentUser = ReactiveCache.getCurrentUser(); if (isNaN(minLimit) || minLimit < -1) { minLimit = -1; } diff --git a/client/lib/utils.js b/client/lib/utils.js index cfc313f62..15896e5c3 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -4,10 +4,11 @@ Utils = { setBackgroundImage(url) { const currentBoard = Utils.getCurrentBoard(); if (currentBoard.backgroundImageURL !== undefined) { - $(".board-wrapper,.board-wrapper .board-canvas").css({"background":"url(" + currentBoard.backgroundImageURL + ")","background-size":"cover"}); + $(".board-wrapper").css({"background":"url(" + currentBoard.backgroundImageURL + ")","background-size":"cover"}); $(".swimlane,.swimlane .list,.swimlane .list .list-body,.swimlane .list:first-child .list-body").css({"background-color":"transparent"}); - } else if (currentBoard.color !== undefined) { - currentBoard.setColor(currentBoard.color); + $(".minicard").css({"opacity": "0.9"}); + } else if (currentBoard["background-color"]) { + currentBoard.setColor(currentBoard["background-color"]); } }, /** returns the current board id diff --git a/docs/DeveloperDocs/Build-from-source.md b/docs/DeveloperDocs/Build-from-source.md new file mode 100644 index 000000000..e1cab9b6a --- /dev/null +++ b/docs/DeveloperDocs/Build-from-source.md @@ -0,0 +1,204 @@ +## About markdown changes + +Wekan v4.29 changes markdown rendering from [marked](https://github.com/markedjs/marked) to [markdown-it](https://github.com/markdown-it/markdown-it). + +## About emoji + +With markdown-it, also [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji) plugin has been added, supporting [full list of GitHub emojis](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.json). + +Example emoji code, that you can add for example to card name, card description etc: +``` +:rainbow: :thumbsup: :100: +``` +That shows emojis :rainbow: :thumbsup: :100: + +## About other markdown-it plugins + +For markdown-it, there are also other [syntax extensions](https://github.com/markdown-it/markdown-it#syntax-extensions) where some are listed at that markdown-it page, and [others at npmjs.com](https://www.npmjs.org/browse/keyword/markdown-it-plugin). + +For example, how to get some [mermaid plugin](https://www.npmjs.com/search?q=markdown-it-mermaid) working so that some syntax works for https://mermaid-js.github.io/mermaid/ ? + +## How you could add another plugin + +Using newest Ubuntu amd64: + +# Meteor 2 + +### 1. Install git and configure it +``` +sudo apt -y install git + +git config --global user.name "Yourfirstname Yourlastname" + +git config --global user.email email-address-you-use-at-github@example.com + +git config --global push.default simple + +nano .ssh/config +``` +There add your User (GitHub username) and IdentityFile (Your ssh private key. Not public key that has .pub). +For indentation, use one tab. +``` +Host * + IdentitiesOnly=yes + +Host github.com + Hostname github.com + User xet7 + IdentityFile ~/.ssh/id_xet7ed +``` +Save and Exit with Ctrl-o Enter Ctrl-x Enter + +If you do not have ssh key, create it: +``` +ssh-keygen +``` +And press Enter about 3 times, until you have private key at `~/.ssh/id_rsa` and public key at `~/.ssh/id_rsa.pub` + +Add public key `.pub` to your github account web interface. + +Add path to Meteor: +``` +nano .bashrc +``` +There at bottom add: +``` +export PATH=~/.meteor:$PATH +``` +Save and Exit with Ctrl-o Enter Ctrl-x Enter + +### 2. Create fork of `https://github.com/wekan/wekan` at GitHub web page + +``` +mkdir repos + +cd repos + +git clone git@github.com:YourGithubUsername/wekan.git + +cd wekan +``` +### 3. Select option 1 to install dependencies, and then Enter. +``` +./rebuild-wekan.sh + +1 + +./rebuild-wekan.sh + +2 + +./rebuild-wekan.sh + +3 +``` +That does: 1 install dependencies, 2 builds wekan, 3 starts wekan in development mode with command `meteor`, so it can detect if some file changes and try to rebuild automatically and reload webbroser. But, still sometimes, it may need stopping with Ctrl-c and full build with option 2. + +And then [register and login](Adding-users) at http://localhost:4000 + +### OPTIONAL, NOT NEEDED: 5. Add new plugin package +``` +meteor npm install markdown-it-something --save +``` + +Edit file `wekan/packages/markdown/src-integration.js` and add using that new package, using code example from that new plugin page, or similar like emoji plugin was added. + +### 7. Test + +Test does that new plugin syntax work, for example in card title, card description etc on other input fields. + +### 8. If it works, create pull request + +If normal markdown, emoji, and your new added plugin syntax all work, commit your changes: +``` +git add --all + +git commit -m "Added plugin markdown-it-something." + +git push +``` +And then at your GitHub for `https://github.com/YOUR-GITHUB-USERNAME/wekan` click `Create pull request`. + +# Meteor 3 + +At 2024-06-26, it looks like from https://nodejs.org/en that Node.js LTS version is 20.15.0 , so change to newest Node.js LTS, delete old Meteor: +``` +sudo n 20.15.0 + +sudo npm -g install npm + +cd + +rm -rf .meteor +``` +Check how to install newest Meteor from Meteor 3 PR at https://github.com/meteor/meteor/pull/13163 , for example: +``` +npx meteor@rc +``` +Check what branches there are: +``` +cd repos/wekan + +git branch -a +``` +Change to Meteor 3 branch: +``` +git checkout feature-meteor3 +``` +Build wekan: +``` +./rebuild-wekan.sh + +2 +``` +If there are errors, try to fix them. + +Or try to run wekan: +``` +./rebuild-wekan.sh + +3 +``` +# Updating + +There are usually updates both for npm packages and Meteor + +Updating npm packages: +``` +npm update +``` +Checking for vulnerable packages: +``` +npm audit +``` +Fixing vulnerable npm packages by updating to newer packages: +``` +npm audit fix +``` +If that did not help, use force: +``` +npm audit fix --force +``` +If that did not help, read links from that `npm audit` command did show, remove deprecated dependencies, update to other maintained dependencies. + +Updating to next Meteor release: +``` +meteor update +``` +Updating to specific Meteor release: +``` +meteor update --release METEOR@3.0-rc.4 +``` +Trying to update all Meteor packages: +``` +meteor update --release METEOR@3.0-rc.4 --all-packages +``` +Allowing incompatible updates, that may sometime work: +``` +meteor update --release METEOR@3.0-rc.4 --all-packages --allow-incompatible-update +``` +If you are changing Meteor and Node.js versions, you may need to reset Meteor: +``` +meteor reset +``` +Or alternatively, delete wekan repo (if you did not need any changes you made), and clone wekan repo again, and then build etc. diff --git a/docs/DeveloperDocs/Meteor.md b/docs/DeveloperDocs/Meteor.md index d0abf135f..a16f03e71 100644 --- a/docs/DeveloperDocs/Meteor.md +++ b/docs/DeveloperDocs/Meteor.md @@ -1,18 +1,71 @@ -## Upgrading Meteor +## Videos about upgrading to Meteor 3 -- Disclaimer: - - These are opinions about upgrading, from xet7, maintainer of WeKan Open Source kanban https://wekan.github.io - - xet7 thinks, that it is good to keep using current frontend and backend frameworks, upgrade them when possible. If there is any problems, ask at https://forums.meteor.com - - xet7 thinks, that upgrading to newest Meteor 2 and Meteor 3 is being made more easier all the time, when new dependencies become available, any bugs are fixed, etc. So it is good to make all possible upgrading steps available. -- Upgrade to newest 2.14 https://guide.meteor.com/2.14-migration . Currently xet7 is using newest 2.14.1-beta.0 in production release of WeKan https://forums.meteor.com/t/meteor-v2-14-1-beta-0-is-out/61142 -- Prepare for 3.0 https://guide.meteor.com/3.0-migration -- Migrate Async - - Helper tool https://forums.meteor.com/t/blaze-async-migration-helper-babel-plugin-tracker-async-enhance-for-the-client-side-released/60842 - - https://guide.meteor.com/prepare-meteor-3.0 -- Look at progress of migrated packages https://forums.meteor.com/t/looking-for-help-migrating-packages-to-meteor-3-0/60985 +- Storyteller + - 2024-07-15: WeKan Upgrades https://www.youtube.com/watch?v=Zjb3m9JsAD0 + - 2024-07-08: Upgrading Meteor examples https://www.youtube.com/watch?v=jzWXxOe93t4 + - Upcoming and past: https://www.youtube.com/@storytellercz/streams +- React.js + - WeKan uses Blaze and Jade, not React. + - 2024-08-02: + - https://www.youtube.com/watch?v=NnT7AbVMnj4 + - https://thenewstack.io/after-a-decade-of-react-is-frontend-a-post-react-world-now/ + - https://thenewstack.io/pivoting-from-react-to-native-dom-apis-a-real-world-example/ + - https://thenewstack.io/how-web-components-are-used-at-github-and-salesforce/ + - https://devclass.com/2024/07/22/react-community-splitting-into-full-stack-and-client-only-camps-suggests-survey/ + - https://news.ycombinator.com/item?id=41068685 + - 2024-07-10: Storyteller at React Wroclaw Meetup, talking about Meteor.js and React: https://www.youtube.com/watch?v=4dnM6bXZCz4&t=741s + - How A Small Team of Developers Created React at Facebook | React.js: The Documentary https://www.youtube.com/watch?v=8pDqJVdNa44 +https://www.youtube.com/watch?v=8pDqJVdNa44 +- Meteor Dispatches Podcast + - 46: 2024-07-12: Packages you need in every app https://www.youtube.com/watch?v=S2YkZfKN0DI + - 25: 2024-02-09: WeKan Security https://www.youtube.com/watch?v=zic-h8jG6F8 + - 16: 2023-12-08: WeKan interview https://www.youtube.com/watch?v=ke-mbnZM3zE + - Upcoming and past: https://www.youtube.com/@meteorjscommunity/streams + - Playlists: https://www.youtube.com/@meteorjscommunity/playlists + - Some recent also had info, how to make dependencies compatible with both Meteor 2 and Meteor 3 - Add Eslint 3 and fix anything found - - https://youtu.be/rFjNNNc_7-E + - https://www.youtube.com/watch?v=rFjNNNc_7-E - https://github.com/quavedev/eslint-plugin - https://github.com/quavedev/meteor-template/pull/8 -- Watch Meteor Dispatches etc Podcasts https://www.youtube.com/@meteorjscommunity/playlists - - Some recent also had info, how to make dependencies compatible with both Meteor 2 and Meteor 3 + +## Upgrading to Meteor 3 + +- Meteor 3 migration guide: https://v3-migration-docs.meteor.com ( older pages at https://guide.meteor.com/3.0-migration or https://guide.meteor.com/prepare-meteor-3.0 ) +- Look at progress of migrated packages https://forums.meteor.com/t/looking-for-help-migrating-packages-to-meteor-3-0/60985 +- Migrate from Fibers (works only at Meteor 2 and Node.js 14) to Async/Await (works with Meteor 3 and Node.js 20) + - Helper tool https://forums.meteor.com/t/blaze-async-migration-helper-babel-plugin-tracker-async-enhance-for-the-client-side-released/60842 + - Info how Async/Await works, from Storyteller: https://github.com/wekan/wekan/wiki/AsyncAwait +- Forums posts about migrating: https://forums.meteor.com +- ( Older version upgrade to newest 2.14 https://guide.meteor.com/2.14-migration ) + +## Removing unused files + +From Meteor Discord chat from someone: + +> Nice tool that I found out about today. I was able to remove 58 unused files, functions, exports, types and dependencies 😄 +> +> https://knip.dev + +## Lint + +From Meteor Discord chat from someone: + +> We started using https://biomejs.dev to replace eslint and prettier on Galaxy 2, and it's been amazing. It's speedy, easy to configure, and has fewer packages to care about. +> +> Just sharing it here in case someone has never heard about it before + + +## Building WeKan + +- https://github.com/wekan/wekan/wiki/Emoji +- Docs: https://github.com/wekan/wekan/tree/main/docs + +## Similar technology + +- https://en.wikipedia.org/wiki/JavaScript_engine +- https://en.wikipedia.org/wiki/Single-page_application +- https://en.wikipedia.org/wiki/Web_framework +- https://en.wikipedia.org/wiki/Progressive_web_app +- https://en.wikipedia.org/wiki/Web_2.0 +- https://en.wikipedia.org/wiki/Meteor_(web_framework) +- https://en.wikipedia.org/wiki/Next.js diff --git a/docs/Platforms/Test-Edge.md b/docs/DeveloperDocs/Test-Edge.md similarity index 100% rename from docs/Platforms/Test-Edge.md rename to docs/DeveloperDocs/Test-Edge.md diff --git a/docs/Features/Python.md b/docs/Features/Python.md index 8d47858f8..64b62abe9 100644 --- a/docs/Features/Python.md +++ b/docs/Features/Python.md @@ -1,5 +1,5 @@ Some Python etc code in WeKan, that is not yet added directly to WeKan: -- [LDAP sync script, that also correctly removes users](https://github.com/wekan/wekan/blob/main/ldap-sync/ldap-sync.py) +- [LDAP sync script, that also correctly removes users](https://github.com/wekan/wekan/blob/main/docs/Login/ldap-sync/ldap-sync.py) - [Email notifications to AWS SES](https://github.com/wekan/wekan/issues/3543#issuecomment-1199897164) - [Prometheus Exporter](https://github.com/wekan/wekan-prometheus-exporter) - [Burndown Chart](Burndown-and-Velocity-Chart) @@ -12,4 +12,4 @@ Some Python etc code in WeKan, that is not yet added directly to WeKan: - [Logstash and ElasticSearch](https://github.com/wekan/wekan-logstash) - iCal server in [Python](https://github.com/wekan/wekan-ical-server) and [PHP](https://github.com/wekan/wekan-ical-php) - [Sandstorm CSV related Python code](Wekan-Sandstorm-cards-to-CSV-using-Python) -- [Trello API test code](https://github.com/wekan/wekan/tree/main/trello) +- [Trello API test code](https://github.com/wekan/wekan/tree/main/docs/ImportExport/trello) diff --git a/asana/CHANGELOG.md b/docs/ImportExport/asana/CHANGELOG.md similarity index 100% rename from asana/CHANGELOG.md rename to docs/ImportExport/asana/CHANGELOG.md diff --git a/asana/LICENSE b/docs/ImportExport/asana/LICENSE similarity index 100% rename from asana/LICENSE rename to docs/ImportExport/asana/LICENSE diff --git a/asana/export_boards.pl b/docs/ImportExport/asana/export_boards.pl similarity index 100% rename from asana/export_boards.pl rename to docs/ImportExport/asana/export_boards.pl diff --git a/asana/load_tasks.pl b/docs/ImportExport/asana/load_tasks.pl similarity index 100% rename from asana/load_tasks.pl rename to docs/ImportExport/asana/load_tasks.pl diff --git a/trello/CHANGELOG.md b/docs/ImportExport/trello/CHANGELOG.md similarity index 100% rename from trello/CHANGELOG.md rename to docs/ImportExport/trello/CHANGELOG.md diff --git a/trello/LICENSE b/docs/ImportExport/trello/LICENSE similarity index 100% rename from trello/LICENSE rename to docs/ImportExport/trello/LICENSE diff --git a/docs/ImportExport/Migrating-from-Trello.md b/docs/ImportExport/trello/Migrating-from-Trello.md similarity index 100% rename from docs/ImportExport/Migrating-from-Trello.md rename to docs/ImportExport/trello/Migrating-from-Trello.md diff --git a/docs/ImportExport/Wekan-vs-Trello-vs-Restyaboard.md b/docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md similarity index 100% rename from docs/ImportExport/Wekan-vs-Trello-vs-Restyaboard.md rename to docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md diff --git a/trello/api.py b/docs/ImportExport/trello/api.py similarity index 100% rename from trello/api.py rename to docs/ImportExport/trello/api.py diff --git a/trello/trello-project100.json b/docs/ImportExport/trello/trello-project100.json similarity index 100% rename from trello/trello-project100.json rename to docs/ImportExport/trello/trello-project100.json diff --git a/docs/Login/Multitenancy.md b/docs/Login/Multitenancy.md new file mode 100644 index 000000000..e6ba9f08e --- /dev/null +++ b/docs/Login/Multitenancy.md @@ -0,0 +1,12 @@ +Q: ​​Is Multi-tenancy like ability to configure multiple ROOT_URL for same Meteor app? Or having relative URLs? + +A: Yes + +https://www.youtube.com/watch?v=917v1a01-Ko + +https://github.com/Meteor-Community-Packages/meteor-partitioner + +Related: + +- https://www.enterpriseready.io +- https://github.com/clinical-meteor/hipaa-audit-log diff --git a/docs/Platforms/OS/OAuth2.md b/docs/Login/OAuth2.md similarity index 100% rename from docs/Platforms/OS/OAuth2.md rename to docs/Login/OAuth2.md diff --git a/docs/Login/SAML.md b/docs/Login/SAML.md index b542b2d97..55ddce08c 100644 --- a/docs/Login/SAML.md +++ b/docs/Login/SAML.md @@ -1,4 +1,32 @@ -Related SAML code, not in WeKan yet: https://forums.meteor.com/t/what-are-you-working-on/59187 +Related Meteor SAML code, not in WeKan yet: + +- New: https://forums.meteor.com/t/meteor-and-saml/61561 +- Old link: https://forums.meteor.com/t/what-are-you-working-on/59187 + +Sandstorm has SAML login, and old WeKan that will be updated someday: + +- https://github.com/wekan/wekan/wiki/Sandstorm + +How SAML works: + +- https://ssoready.com/blog/engineering/a-gentle-intro-to-saml/ +- https://news.ycombinator.com/item?id=41036982 +- https://www.sheshbabu.com/posts/visual-explanation-of-saml-authentication/ +- https://news.ycombinator.com/item?id=41057814 + +Ruby on Rails OmniAuth, that has Shibboleth and SAML: + +- https://github.com/omniauth/omniauth/wiki/List-of-Strategies +- https://github.com/omniauth/omniauth + +SAML at SSOReady: + +- https://github.com/ssoready/ssoready +- https://news.ycombinator.com/item?id=41110850 + +The SSO Wall of Shame: + +- https://sso.tax [SAML Issue](https://github.com/wekan/wekan/issues/708) diff --git a/ldap-sync/ldap-sync.py b/docs/Login/ldap-sync/ldap-sync.py similarity index 100% rename from ldap-sync/ldap-sync.py rename to docs/Login/ldap-sync/ldap-sync.py diff --git a/docs/Platforms/OS/Android.md b/docs/Platforms/FOSS/Android.md similarity index 100% rename from docs/Platforms/OS/Android.md rename to docs/Platforms/FOSS/Android.md diff --git a/docs/Platforms/Cloud-Foundry.md b/docs/Platforms/FOSS/Cloud-Foundry.md similarity index 100% rename from docs/Platforms/Cloud-Foundry.md rename to docs/Platforms/FOSS/Cloud-Foundry.md diff --git a/docs/Platforms/OS/Debian.md b/docs/Platforms/FOSS/Debian.md similarity index 100% rename from docs/Platforms/OS/Debian.md rename to docs/Platforms/FOSS/Debian.md diff --git a/docs/Docker/Docker.md b/docs/Platforms/FOSS/Docker/Docker.md similarity index 100% rename from docs/Docker/Docker.md rename to docs/Platforms/FOSS/Docker/Docker.md diff --git a/docs/Docker/Export-Docker-Mongo-Data.md b/docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md similarity index 100% rename from docs/Docker/Export-Docker-Mongo-Data.md rename to docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md diff --git a/docs/Docker/Install-Wekan-Docker-for-testing.md b/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-for-testing.md similarity index 100% rename from docs/Docker/Install-Wekan-Docker-for-testing.md rename to docs/Platforms/FOSS/Docker/Install-Wekan-Docker-for-testing.md diff --git a/docs/Docker/Install-Wekan-Docker-in-production.md b/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-in-production.md similarity index 100% rename from docs/Docker/Install-Wekan-Docker-in-production.md rename to docs/Platforms/FOSS/Docker/Install-Wekan-Docker-in-production.md diff --git a/docs/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md b/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md similarity index 100% rename from docs/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md rename to docs/Platforms/FOSS/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md diff --git a/docs/Docker/Move-Docker-containers-to-other-computer.md b/docs/Platforms/FOSS/Docker/Move-Docker-containers-to-other-computer.md similarity index 100% rename from docs/Docker/Move-Docker-containers-to-other-computer.md rename to docs/Platforms/FOSS/Docker/Move-Docker-containers-to-other-computer.md diff --git a/docs/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md b/docs/Platforms/FOSS/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md similarity index 100% rename from docs/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md rename to docs/Platforms/FOSS/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md diff --git a/docs/Docker/Repair-Docker.md b/docs/Platforms/FOSS/Docker/Repair-Docker.md similarity index 100% rename from docs/Docker/Repair-Docker.md rename to docs/Platforms/FOSS/Docker/Repair-Docker.md diff --git a/docs/Platforms/OS/FreeBSD.md b/docs/Platforms/FOSS/FreeBSD.md similarity index 100% rename from docs/Platforms/OS/FreeBSD.md rename to docs/Platforms/FOSS/FreeBSD.md diff --git a/docs/Platforms/Friend.md b/docs/Platforms/FOSS/Friend.md similarity index 100% rename from docs/Platforms/Friend.md rename to docs/Platforms/FOSS/Friend.md diff --git a/docs/Platforms/Helm.md b/docs/Platforms/FOSS/Helm.md similarity index 100% rename from docs/Platforms/Helm.md rename to docs/Platforms/FOSS/Helm.md diff --git a/helm.md b/docs/Platforms/FOSS/Helm2.md similarity index 100% rename from helm.md rename to docs/Platforms/FOSS/Helm2.md diff --git a/docs/Platforms/OpenShift.md b/docs/Platforms/FOSS/OpenShift/OpenShift.md similarity index 100% rename from docs/Platforms/OpenShift.md rename to docs/Platforms/FOSS/OpenShift/OpenShift.md diff --git a/openshift/README.md b/docs/Platforms/FOSS/OpenShift/README.md similarity index 100% rename from openshift/README.md rename to docs/Platforms/FOSS/OpenShift/README.md diff --git a/openshift/wekan.yml b/docs/Platforms/FOSS/OpenShift/wekan.yml similarity index 100% rename from openshift/wekan.yml rename to docs/Platforms/FOSS/OpenShift/wekan.yml diff --git a/docs/Platforms/OS/OpenSuse.md b/docs/Platforms/FOSS/OpenSuse.md similarity index 100% rename from docs/Platforms/OS/OpenSuse.md rename to docs/Platforms/FOSS/OpenSuse.md diff --git a/docs/Platforms/Platforms.md b/docs/Platforms/FOSS/Platforms.md similarity index 100% rename from docs/Platforms/Platforms.md rename to docs/Platforms/FOSS/Platforms.md diff --git a/docs/ImportExport/Export-from-Wekan-Sandstorm-grain-.zip-file.md b/docs/Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md similarity index 100% rename from docs/ImportExport/Export-from-Wekan-Sandstorm-grain-.zip-file.md rename to docs/Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md diff --git a/docs/Platforms/Sandstorm.md b/docs/Platforms/FOSS/Sandstorm/Sandstorm.md similarity index 100% rename from docs/Platforms/Sandstorm.md rename to docs/Platforms/FOSS/Sandstorm/Sandstorm.md diff --git a/docs/ImportExport/Wekan-Sandstorm-cards-to-CSV-using-Python.md b/docs/Platforms/FOSS/Sandstorm/Wekan-Sandstorm-cards-to-CSV-using-Python.md similarity index 100% rename from docs/ImportExport/Wekan-Sandstorm-cards-to-CSV-using-Python.md rename to docs/Platforms/FOSS/Sandstorm/Wekan-Sandstorm-cards-to-CSV-using-Python.md diff --git a/docs/Platforms/Wekan-vs-Sandstorm.md b/docs/Platforms/FOSS/Sandstorm/Wekan-vs-Sandstorm.md similarity index 100% rename from docs/Platforms/Wekan-vs-Sandstorm.md rename to docs/Platforms/FOSS/Sandstorm/Wekan-vs-Sandstorm.md diff --git a/docs/Platforms/SmartOS.md b/docs/Platforms/FOSS/SmartOS.md similarity index 100% rename from docs/Platforms/SmartOS.md rename to docs/Platforms/FOSS/SmartOS.md diff --git a/docs/Snap/Automatic-update-schedule.md b/docs/Platforms/FOSS/Snap/Automatic-update-schedule.md similarity index 100% rename from docs/Snap/Automatic-update-schedule.md rename to docs/Platforms/FOSS/Snap/Automatic-update-schedule.md diff --git a/docs/Snap/Backup-and-restore.md b/docs/Platforms/FOSS/Snap/Backup-and-restore.md similarity index 100% rename from docs/Snap/Backup-and-restore.md rename to docs/Platforms/FOSS/Snap/Backup-and-restore.md diff --git a/docs/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md b/docs/Platforms/FOSS/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md similarity index 100% rename from docs/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md rename to docs/Platforms/FOSS/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md diff --git a/docs/Snap/CentOS-7.md b/docs/Platforms/FOSS/Snap/CentOS-7.md similarity index 100% rename from docs/Snap/CentOS-7.md rename to docs/Platforms/FOSS/Snap/CentOS-7.md diff --git a/docs/Snap/CentOS8.md b/docs/Platforms/FOSS/Snap/CentOS8.md similarity index 100% rename from docs/Snap/CentOS8.md rename to docs/Platforms/FOSS/Snap/CentOS8.md diff --git a/docs/Snap/Home.md b/docs/Platforms/FOSS/Snap/Home.md similarity index 100% rename from docs/Snap/Home.md rename to docs/Platforms/FOSS/Snap/Home.md diff --git a/docs/Snap/Install-snap-with-Ansible.md b/docs/Platforms/FOSS/Snap/Install-snap-with-Ansible.md similarity index 100% rename from docs/Snap/Install-snap-with-Ansible.md rename to docs/Platforms/FOSS/Snap/Install-snap-with-Ansible.md diff --git a/docs/Snap/Install.md b/docs/Platforms/FOSS/Snap/Install.md similarity index 100% rename from docs/Snap/Install.md rename to docs/Platforms/FOSS/Snap/Install.md diff --git a/docs/Snap/Limit-snap-to-root-user-only.md b/docs/Platforms/FOSS/Snap/Limit-snap-to-root-user-only.md similarity index 100% rename from docs/Snap/Limit-snap-to-root-user-only.md rename to docs/Platforms/FOSS/Snap/Limit-snap-to-root-user-only.md diff --git a/docs/Snap/Making-releases-from-source.md b/docs/Platforms/FOSS/Snap/Making-releases-from-source.md similarity index 100% rename from docs/Snap/Making-releases-from-source.md rename to docs/Platforms/FOSS/Snap/Making-releases-from-source.md diff --git a/docs/Snap/Making-releases.md b/docs/Platforms/FOSS/Snap/Making-releases.md similarity index 100% rename from docs/Snap/Making-releases.md rename to docs/Platforms/FOSS/Snap/Making-releases.md diff --git a/docs/Snap/Many-Snaps-on-LXC.md b/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md similarity index 100% rename from docs/Snap/Many-Snaps-on-LXC.md rename to docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md diff --git a/docs/Snap/Old-Making-releases.md b/docs/Platforms/FOSS/Snap/Old-Making-releases.md similarity index 100% rename from docs/Snap/Old-Making-releases.md rename to docs/Platforms/FOSS/Snap/Old-Making-releases.md diff --git a/docs/Snap/OpenSuse.md b/docs/Platforms/FOSS/Snap/OpenSuse.md similarity index 100% rename from docs/Snap/OpenSuse.md rename to docs/Platforms/FOSS/Snap/OpenSuse.md diff --git a/docs/Snap/Sharing-MongoDB.md b/docs/Platforms/FOSS/Snap/Sharing-MongoDB.md similarity index 100% rename from docs/Snap/Sharing-MongoDB.md rename to docs/Platforms/FOSS/Snap/Sharing-MongoDB.md diff --git a/docs/Platforms/Snap.md b/docs/Platforms/FOSS/Snap/Snap.md similarity index 100% rename from docs/Platforms/Snap.md rename to docs/Platforms/FOSS/Snap/Snap.md diff --git a/docs/Snap/Supported-settings-keys.md b/docs/Platforms/FOSS/Snap/Supported-settings-keys.md similarity index 100% rename from docs/Snap/Supported-settings-keys.md rename to docs/Platforms/FOSS/Snap/Supported-settings-keys.md diff --git a/docs/Snap/Testing-new-WeKan-Snap-versions.md b/docs/Platforms/FOSS/Snap/Testing-new-WeKan-Snap-versions.md similarity index 100% rename from docs/Snap/Testing-new-WeKan-Snap-versions.md rename to docs/Platforms/FOSS/Snap/Testing-new-WeKan-Snap-versions.md diff --git a/docs/Snap/Troubleshooting.md b/docs/Platforms/FOSS/Snap/Troubleshooting.md similarity index 100% rename from docs/Snap/Troubleshooting.md rename to docs/Platforms/FOSS/Snap/Troubleshooting.md diff --git a/docs/Snap/Uninstall.md b/docs/Platforms/FOSS/Snap/Uninstall.md similarity index 100% rename from docs/Snap/Uninstall.md rename to docs/Platforms/FOSS/Snap/Uninstall.md diff --git a/docs/Snap/Update-all-snap-packages.md b/docs/Platforms/FOSS/Snap/Update-all-snap-packages.md similarity index 100% rename from docs/Snap/Update-all-snap-packages.md rename to docs/Platforms/FOSS/Snap/Update-all-snap-packages.md diff --git a/docs/Platforms/OS/Install-and-Update.md b/docs/Platforms/FOSS/Source/Install-and-Update.md similarity index 100% rename from docs/Platforms/OS/Install-and-Update.md rename to docs/Platforms/FOSS/Source/Install-and-Update.md diff --git a/docs/Platforms/OS/Install-from-source-without-root.md b/docs/Platforms/FOSS/Source/Install-from-source-without-root.md similarity index 100% rename from docs/Platforms/OS/Install-from-source-without-root.md rename to docs/Platforms/FOSS/Source/Install-from-source-without-root.md diff --git a/docs/Platforms/OS/Install-source-without-sudo-on-Linux.md b/docs/Platforms/FOSS/Source/Install-source-without-sudo-on-Linux.md similarity index 100% rename from docs/Platforms/OS/Install-source-without-sudo-on-Linux.md rename to docs/Platforms/FOSS/Source/Install-source-without-sudo-on-Linux.md diff --git a/docs/Platforms/Raspberry-Pi.md b/docs/Platforms/FOSS/Source/Raspberry-Pi.md similarity index 100% rename from docs/Platforms/Raspberry-Pi.md rename to docs/Platforms/FOSS/Source/Raspberry-Pi.md diff --git a/docs/Platforms/Source.md b/docs/Platforms/FOSS/Source/Source.md similarity index 100% rename from docs/Platforms/Source.md rename to docs/Platforms/FOSS/Source/Source.md diff --git a/docs/Platforms/UCS.md b/docs/Platforms/FOSS/UCS.md similarity index 100% rename from docs/Platforms/UCS.md rename to docs/Platforms/FOSS/UCS.md diff --git a/docs/Platforms/Ubuntu-Core.md b/docs/Platforms/FOSS/Ubuntu-Core.md similarity index 100% rename from docs/Platforms/Ubuntu-Core.md rename to docs/Platforms/FOSS/Ubuntu-Core.md diff --git a/docs/Platforms/Vagrant.md b/docs/Platforms/FOSS/Vagrant.md similarity index 100% rename from docs/Platforms/Vagrant.md rename to docs/Platforms/FOSS/Vagrant.md diff --git a/docs/Platforms/ppc.md b/docs/Platforms/FOSS/ppc.md similarity index 100% rename from docs/Platforms/ppc.md rename to docs/Platforms/FOSS/ppc.md diff --git a/docs/Platforms/s390x.md b/docs/Platforms/FOSS/s390x.md similarity index 100% rename from docs/Platforms/s390x.md rename to docs/Platforms/FOSS/s390x.md diff --git a/torodb-postgresql/CHANGELOG.md b/docs/Platforms/FOSS/torodb-postgresql/CHANGELOG.md similarity index 100% rename from torodb-postgresql/CHANGELOG.md rename to docs/Platforms/FOSS/torodb-postgresql/CHANGELOG.md diff --git a/torodb-postgresql/LICENSE b/docs/Platforms/FOSS/torodb-postgresql/LICENSE similarity index 100% rename from torodb-postgresql/LICENSE rename to docs/Platforms/FOSS/torodb-postgresql/LICENSE diff --git a/torodb-postgresql/README.md b/docs/Platforms/FOSS/torodb-postgresql/README.md similarity index 100% rename from torodb-postgresql/README.md rename to docs/Platforms/FOSS/torodb-postgresql/README.md diff --git a/torodb-postgresql/docker-compose.yml b/docs/Platforms/FOSS/torodb-postgresql/docker-compose.yml similarity index 100% rename from torodb-postgresql/docker-compose.yml rename to docs/Platforms/FOSS/torodb-postgresql/docker-compose.yml diff --git a/docs/Platforms/virtual-appliance.md b/docs/Platforms/FOSS/virtual-appliance.md similarity index 100% rename from docs/Platforms/virtual-appliance.md rename to docs/Platforms/FOSS/virtual-appliance.md diff --git a/docs/Platforms/OS/Chromebook.md b/docs/Platforms/Propietary/Chromebook.md similarity index 100% rename from docs/Platforms/OS/Chromebook.md rename to docs/Platforms/Propietary/Chromebook.md diff --git a/docs/Platforms/AWS.md b/docs/Platforms/Propietary/Cloud/AWS.md similarity index 100% rename from docs/Platforms/AWS.md rename to docs/Platforms/Propietary/Cloud/AWS.md diff --git a/docs/Platforms/Azure.md b/docs/Platforms/Propietary/Cloud/Azure.md similarity index 100% rename from docs/Platforms/Azure.md rename to docs/Platforms/Propietary/Cloud/Azure.md diff --git a/docs/Platforms/Cloudron.md b/docs/Platforms/Propietary/Cloud/Cloudron.md similarity index 100% rename from docs/Platforms/Cloudron.md rename to docs/Platforms/Propietary/Cloud/Cloudron.md diff --git a/docs/Platforms/Dome.md b/docs/Platforms/Propietary/Cloud/Dome.md similarity index 100% rename from docs/Platforms/Dome.md rename to docs/Platforms/Propietary/Cloud/Dome.md diff --git a/docs/Platforms/Heroku.md b/docs/Platforms/Propietary/Cloud/Heroku.md similarity index 100% rename from docs/Platforms/Heroku.md rename to docs/Platforms/Propietary/Cloud/Heroku.md diff --git a/docs/Platforms/Metal.md b/docs/Platforms/Propietary/Cloud/Metal.md similarity index 100% rename from docs/Platforms/Metal.md rename to docs/Platforms/Propietary/Cloud/Metal.md diff --git a/docs/Platforms/OVH.md b/docs/Platforms/Propietary/Cloud/OVH.md similarity index 100% rename from docs/Platforms/OVH.md rename to docs/Platforms/Propietary/Cloud/OVH.md diff --git a/docs/Platforms/OpenVZ.md b/docs/Platforms/Propietary/Cloud/OpenVZ.md similarity index 100% rename from docs/Platforms/OpenVZ.md rename to docs/Platforms/Propietary/Cloud/OpenVZ.md diff --git a/docs/Platforms/PikaPods.md b/docs/Platforms/Propietary/Cloud/PikaPods.md similarity index 100% rename from docs/Platforms/PikaPods.md rename to docs/Platforms/Propietary/Cloud/PikaPods.md diff --git a/docs/Platforms/Propietary/Cloud/RepoCloud.md b/docs/Platforms/Propietary/Cloud/RepoCloud.md new file mode 100644 index 000000000..fc07e6349 --- /dev/null +++ b/docs/Platforms/Propietary/Cloud/RepoCloud.md @@ -0,0 +1,3 @@ +https://repocloud.io + +[![Deploy on RepoCloud](RepoCloud.svg)](https://repocloud.io/details/?app_id=34) diff --git a/docs/Platforms/Propietary/Cloud/RepoCloud.svg b/docs/Platforms/Propietary/Cloud/RepoCloud.svg new file mode 100644 index 000000000..d1d128c4d --- /dev/null +++ b/docs/Platforms/Propietary/Cloud/RepoCloud.svg @@ -0,0 +1,11 @@ + + New Project + + + + + + + \ No newline at end of file diff --git a/docs/Platforms/Scalingo.md b/docs/Platforms/Propietary/Cloud/Scalingo.md similarity index 100% rename from docs/Platforms/Scalingo.md rename to docs/Platforms/Propietary/Cloud/Scalingo.md diff --git a/docs/Platforms/OS/Install-latest-Wekan-release-on-Uberspace.md b/docs/Platforms/Propietary/Cloud/Uberspace.md similarity index 100% rename from docs/Platforms/OS/Install-latest-Wekan-release-on-Uberspace.md rename to docs/Platforms/Propietary/Cloud/Uberspace.md diff --git a/docs/Platforms/Vultr.md b/docs/Platforms/Propietary/Cloud/Vultr.md similarity index 100% rename from docs/Platforms/Vultr.md rename to docs/Platforms/Propietary/Cloud/Vultr.md diff --git a/docs/Platforms/OS/Mac.md b/docs/Platforms/Propietary/Mac.md similarity index 100% rename from docs/Platforms/OS/Mac.md rename to docs/Platforms/Propietary/Mac.md diff --git a/docs/Platforms/Qnap-NAS.md b/docs/Platforms/Propietary/Qnap-NAS.md similarity index 100% rename from docs/Platforms/Qnap-NAS.md rename to docs/Platforms/Propietary/Qnap-NAS.md diff --git a/docs/Platforms/OS/Install-Wekan-from-source-on-Windows.md b/docs/Platforms/Propietary/Windows/Install-Wekan-from-source-on-Windows.md similarity index 100% rename from docs/Platforms/OS/Install-Wekan-from-source-on-Windows.md rename to docs/Platforms/Propietary/Windows/Install-Wekan-from-source-on-Windows.md diff --git a/docs/Platforms/OS/Install-Windows.md b/docs/Platforms/Propietary/Windows/Install-Windows.md similarity index 100% rename from docs/Platforms/OS/Install-Windows.md rename to docs/Platforms/Propietary/Windows/Install-Windows.md diff --git a/docs/Platforms/Offline.md b/docs/Platforms/Propietary/Windows/Offline.md similarity index 94% rename from docs/Platforms/Offline.md rename to docs/Platforms/Propietary/Windows/Offline.md index 2e5cafc41..422b448d9 100644 --- a/docs/Platforms/Offline.md +++ b/docs/Platforms/Propietary/Windows/Offline.md @@ -8,19 +8,19 @@ This is without container (without Docker or Snap). Right click and download files 1-4: -1. [wekan-7.49-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.49/wekan-7.49-amd64-windows.zip) +1. [wekan-7.54-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.54/wekan-7.54-amd64-windows.zip) 2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe) -3. [mongodb-windows-x86_64-6.0.15-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.15-signed.msi) +3. [mongodb-windows-x86_64-6.0.16-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.16-signed.msi) 4. [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/main/start-wekan.bat) 5. Copy files from steps 1-4 with USB stick or DVD to offline Windows computer -6. Double click `mongodb-windows-x86_64-6.0.15-signed.msi` . In installer, uncheck downloading MongoDB compass. +6. Double click `mongodb-windows-x86_64-6.0.16-signed.msi` . In installer, uncheck downloading MongoDB compass. -7. Unzip `wekan-7.49-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files: +7. Unzip `wekan-7.54-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files: ``` bundle (directory) diff --git a/docs/Platforms/WSL.md b/docs/Platforms/Propietary/Windows/WSL.md similarity index 100% rename from docs/Platforms/WSL.md rename to docs/Platforms/Propietary/Windows/WSL.md diff --git a/docs/Platforms/Windows.md b/docs/Platforms/Propietary/Windows/Windows.md similarity index 100% rename from docs/Platforms/Windows.md rename to docs/Platforms/Propietary/Windows/Windows.md diff --git a/docs/Secure-Boot.md b/docs/Secure-Boot.md new file mode 100644 index 000000000..1c1e7b97d --- /dev/null +++ b/docs/Secure-Boot.md @@ -0,0 +1 @@ +https://arstechnica.com/security/2024/07/secure-boot-is-completely-compromised-on-200-models-from-5-big-device-makers/ \ No newline at end of file diff --git a/docs/Webserver/Caddy-Webserver-Config.md b/docs/Webserver/Caddy-Webserver-Config.md index ffc1ea2c4..96ee549dc 100644 --- a/docs/Webserver/Caddy-Webserver-Config.md +++ b/docs/Webserver/Caddy-Webserver-Config.md @@ -76,6 +76,446 @@ Caddy commands list: caddy help ``` +*** + +### PWA site.webmanifest icons override Caddy example + +PWABuilder settings to create Android app at https://pwabuilder.com +- Web view (not Custom Tabs) +- Fullscreen (When not showing top and bottom toolbars. If you like to show those toolbars, change fullscreen to standalone) +- Notifications [X] Enable +- Signing key [X] Use mine + +PWABuilder upgrades: +- Android app upgrade to Android SDK 34 was made with help of this video https://github.com/pwa-builder/PWABuilder/issues/4766#issuecomment-2229867608 + +Icons override at site.webmanifest: +- These settings at Caddyfile override icon URLs etc + +If you like to show toolbars at top and bottom, change also here `fullscreen` to `standalone` + +``` +boards.wekan.team { + tls { + alpn http/1.1 + } + header /.well-known/* Content-Type application/json + header /.well-known/* Access-Control-Allow-Origin * + respond /.well-known/assetlinks.json `[ { + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "team.wekan.boards.twa", + "sha256_cert_fingerprints": ["AA:AA:ED:7D:4C:9C:5A:A3:B5:DA:10:66:14:34:07:5D:EB:BE:96:CD:82:7B:09:46:47:13:65:29:5B:EA:96:30","61:41:86:5B:05:13:9B:64:5F:39:75:5A:16:C3:F2:22:25:6C:DA:74:B9:B0:8C:5F:93:B0:D2:26:65:16:1B:E6"] + } + } ]` + header /site.webmanifest/* Content-Type application/json + header /site.webmanifest/* Access-Control-Allow-Origin * + respond /site.webmanifest ` { + "name": "Wekan", + "short_name": "Wekan", + "icons": [ { + "src": "svg-etc/wekan-logo-512.svg", + "sizes": "any", + "type": "image/svg" + } , { + "src": "android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + } , { + "src": "android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } , { + "src": "Square150x150Logo.scale-100.png", + "sizes": "150x150", + "type": "image/png" + } , { + "src": "Square44x44Logo.scale-100.png", + "sizes": "44x44", + "type": "image/png" + } , { + "src": "StoreLogo.scale-100.png", + "sizes": "50x50", + "type": "image/png" + } , { + "src": "maskable_icon.png", + "sizes": "474x474", + "type": "image/png", + "purpose": "maskable" + } , { + "src": "monochrome-icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "monochrome" + } , { + "src": "windows11/SmallTile.scale-100.png", + "sizes": "71x71" + } , { + "src": "windows11/SmallTile.scale-125.png", + "sizes": "89x89" + } , { + "src": "windows11/SmallTile.scale-150.png", + "sizes": "107x107" + } , { + "src": "windows11/SmallTile.scale-200.png", + "sizes": "142x142" + } , { + "src": "windows11/SmallTile.scale-400.png", + "sizes": "284x284" + } , { + "src": "windows11/Square150x150Logo.scale-100.png", + "sizes": "150x150" + } , { + "src": "windows11/Square150x150Logo.scale-125.png", + "sizes": "188x188" + } , { + "src": "windows11/Square150x150Logo.scale-150.png", + "sizes": "225x225" + } , { + "src": "windows11/Square150x150Logo.scale-200.png", + "sizes": "300x300" + } , { + "src": "windows11/Square150x150Logo.scale-400.png", + "sizes": "600x600" + } , { + "src": "windows11/Wide310x150Logo.scale-100.png", + "sizes": "310x150" + } , { + "src": "windows11/Wide310x150Logo.scale-125.png", + "sizes": "388x188" + } , { + "src": "windows11/Wide310x150Logo.scale-150.png", + "sizes": "465x225" + } , { + "src": "windows11/Wide310x150Logo.scale-200.png", + "sizes": "620x300" + } , { + "src": "windows11/Wide310x150Logo.scale-400.png", + "sizes": "1240x600" + } , { + "src": "windows11/LargeTile.scale-100.png", + "sizes": "310x310" + } , { + "src": "windows11/LargeTile.scale-125.png", + "sizes": "388x388" + } , { + "src": "windows11/LargeTile.scale-150.png", + "sizes": "465x465" + } , { + "src": "windows11/LargeTile.scale-200.png", + "sizes": "620x620" + } , { + "src": "windows11/LargeTile.scale-400.png", + "sizes": "1240x1240" + } , { + "src": "windows11/Square44x44Logo.scale-100.png", + "sizes": "44x44" + } , { + "src": "windows11/Square44x44Logo.scale-125.png", + "sizes": "55x55" + } , { + "src": "windows11/Square44x44Logo.scale-150.png", + "sizes": "66x66" + } , { + "src": "windows11/Square44x44Logo.scale-200.png", + "sizes": "88x88" + } , { + "src": "windows11/Square44x44Logo.scale-400.png", + "sizes": "176x176" + } , { + "src": "windows11/StoreLogo.scale-100.png", + "sizes": "50x50" + } , { + "src": "windows11/StoreLogo.scale-125.png", + "sizes": "63x63" + } , { + "src": "windows11/StoreLogo.scale-150.png", + "sizes": "75x75" + } , { + "src": "windows11/StoreLogo.scale-200.png", + "sizes": "100x100" + } , { + "src": "windows11/StoreLogo.scale-400.png", + "sizes": "200x200" + } , { + "src": "windows11/SplashScreen.scale-100.png", + "sizes": "620x300" + } , { + "src": "windows11/SplashScreen.scale-125.png", + "sizes": "775x375" + } , { + "src": "windows11/SplashScreen.scale-150.png", + "sizes": "930x450" + } , { + "src": "windows11/SplashScreen.scale-200.png", + "sizes": "1240x600" + } , { + "src": "windows11/SplashScreen.scale-400.png", + "sizes": "2480x1200" + } , { + "src": "windows11/Square44x44Logo.targetsize-16.png", + "sizes": "16x16" + } , { + "src": "windows11/Square44x44Logo.targetsize-20.png", + "sizes": "20x20" + } , { + "src": "windows11/Square44x44Logo.targetsize-24.png", + "sizes": "24x24" + } , { + "src": "windows11/Square44x44Logo.targetsize-30.png", + "sizes": "30x30" + } , { + "src": "windows11/Square44x44Logo.targetsize-32.png", + "sizes": "32x32" + } , { + "src": "windows11/Square44x44Logo.targetsize-36.png", + "sizes": "36x36" + } , { + "src": "windows11/Square44x44Logo.targetsize-40.png", + "sizes": "40x40" + } , { + "src": "windows11/Square44x44Logo.targetsize-44.png", + "sizes": "44x44" + } , { + "src": "windows11/Square44x44Logo.targetsize-48.png", + "sizes": "48x48" + } , { + "src": "windows11/Square44x44Logo.targetsize-60.png", + "sizes": "60x60" + } , { + "src": "windows11/Square44x44Logo.targetsize-64.png", + "sizes": "64x64" + } , { + "src": "windows11/Square44x44Logo.targetsize-72.png", + "sizes": "72x72" + } , { + "src": "windows11/Square44x44Logo.targetsize-80.png", + "sizes": "80x80" + } , { + "src": "windows11/Square44x44Logo.targetsize-96.png", + "sizes": "96x96" + } , { + "src": "windows11/Square44x44Logo.targetsize-256.png", + "sizes": "256x256" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-16.png", + "sizes": "16x16" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-20.png", + "sizes": "20x20" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-24.png", + "sizes": "24x24" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-30.png", + "sizes": "30x30" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-32.png", + "sizes": "32x32" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-36.png", + "sizes": "36x36" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-40.png", + "sizes": "40x40" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-44.png", + "sizes": "44x44" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-48.png", + "sizes": "48x48" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-60.png", + "sizes": "60x60" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-64.png", + "sizes": "64x64" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-72.png", + "sizes": "72x72" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-80.png", + "sizes": "80x80" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-96.png", + "sizes": "96x96" + } , { + "src": "windows11/Square44x44Logo.altform-unplated_targetsize-256.png", + "sizes": "256x256" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png", + "sizes": "16x16" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png", + "sizes": "20x20" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png", + "sizes": "24x24" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png", + "sizes": "30x30" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png", + "sizes": "32x32" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png", + "sizes": "36x36" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png", + "sizes": "40x40" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png", + "sizes": "44x44" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png", + "sizes": "48x48" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png", + "sizes": "60x60" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png", + "sizes": "64x64" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png", + "sizes": "72x72" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png", + "sizes": "80x80" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png", + "sizes": "96x96" + } , { + "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png", + "sizes": "256x256" + } , { + "src": "android/android-launchericon-512-512.png", + "sizes": "512x512" + } , { + "src": "android/android-launchericon-192-192.png", + "sizes": "192x192" + } , { + "src": "android/android-launchericon-144-144.png", + "sizes": "144x144" + } , { + "src": "android/android-launchericon-96-96.png", + "sizes": "96x96" + } , { + "src": "android/android-launchericon-72-72.png", + "sizes": "72x72" + } , { + "src": "android/android-launchericon-48-48.png", + "sizes": "48x48" + } , { + "src": "ios/16.png", + "sizes": "16x16" + } , { + "src": "ios/20.png", + "sizes": "20x20" + } , { + "src": "ios/29.png", + "sizes": "29x29" + } , { + "src": "ios/32.png", + "sizes": "32x32" + } , { + "src": "ios/40.png", + "sizes": "40x40" + } , { + "src": "ios/50.png", + "sizes": "50x50" + } , { + "src": "ios/57.png", + "sizes": "57x57" + } , { + "src": "ios/58.png", + "sizes": "58x58" + } , { + "src": "ios/60.png", + "sizes": "60x60" + } , { + "src": "ios/64.png", + "sizes": "64x64" + } , { + "src": "ios/72.png", + "sizes": "72x72" + } , { + "src": "ios/76.png", + "sizes": "76x76" + } , { + "src": "ios/80.png", + "sizes": "80x80" + } , { + "src": "ios/87.png", + "sizes": "87x87" + } , { + "src": "ios/100.png", + "sizes": "100x100" + } , { + "src": "ios/114.png", + "sizes": "114x114" + } , { + "src": "ios/120.png", + "sizes": "120x120" + } , { + "src": "ios/128.png", + "sizes": "128x128" + } , { + "src": "ios/144.png", + "sizes": "144x144" + } , { + "src": "ios/152.png", + "sizes": "152x152" + } , { + "src": "ios/167.png", + "sizes": "167x167" + } , { + "src": "ios/180.png", + "sizes": "180x180" + } , { + "src": "ios/192.png", + "sizes": "192x192" + } , { + "src": "ios/256.png", + "sizes": "256x256" + } , { + "src": "ios/512.png", + "sizes": "512x512" + } , { + "src": "ios/1024.png", + "sizes": "1024x1024" + } + ], + "screenshots": [ { + "src": "screenshot1.webp", + "sizes": "1280x720", + "type": "image/webp" + } , { + "src": "screenshot2.webp", + "sizes": "1280x720", + "type": "image/webp" + } + ], + "theme_color": "#000000", + "background_color": "#000000", + "start_url": "sign-in", + "display": "fullscreen", + "orientation": "any", + "categories": [ + "productivity" + ], + "iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96", + "description": "Open Source kanban with MIT license", + "dir": "auto", + "scope": "https://boards.wekan.team", + "prefer_related_applications": false, + "display_override": [ + "fullscreen" + ] + } ` + reverse_proxy 127.0.0.1:3025 +} +``` *** diff --git a/nginx/nginx.conf b/docs/Webserver/nginx/nginx.conf similarity index 100% rename from nginx/nginx.conf rename to docs/Webserver/nginx/nginx.conf diff --git a/nginx/ssl/.gitkeep b/docs/Webserver/nginx/ssl/.gitkeep similarity index 100% rename from nginx/ssl/.gitkeep rename to docs/Webserver/nginx/ssl/.gitkeep diff --git a/imports/i18n/data/cs.i18n.json b/imports/i18n/data/cs.i18n.json index 9a7541045..3cca071ac 100644 --- a/imports/i18n/data/cs.i18n.json +++ b/imports/i18n/data/cs.i18n.json @@ -85,14 +85,14 @@ "add-card": "Přidat kartu", "add-card-to-top-of-list": "Přidat kartu na začátek seznamu", "add-card-to-bottom-of-list": "Přidat kartu na konec seznamu", - "setListWidthPopup-title": "Set List Width", - "set-list-width": "Set List Width", - "set-list-width-value": "List Width (pixels)", - "list-width-error-message": "List width must be a positive integer", - "setSwimlaneHeightPopup-title": "Set Swimlane Height", - "set-swimlane-height": "Set Swimlane Height", - "set-swimlane-height-value": "Swimlane Height (pixels)", - "swimlane-height-error-message": "Swimlane height must be a positive integer", + "setListWidthPopup-title": "Nastavit šířku seznamu", + "set-list-width": "Nastavit šířku seznamu", + "set-list-width-value": "Šířka seznamu (pixely)", + "list-width-error-message": "Šířka seznamu musí být kladné celé číslo", + "setSwimlaneHeightPopup-title": "Nastavit výšku swimlane", + "set-swimlane-height": "Nastavit výšku swimlane", + "set-swimlane-height-value": "Výška swimlane (pixely)", + "swimlane-height-error-message": "Výška swimlane musí být celé kladné číslo", "add-swimlane": "Přidat Swimlane", "add-subtask": "Přidat Podúkol", "add-checklist": "Přidat zaškrtávací seznam", @@ -100,10 +100,10 @@ "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Převést na kartu", - "add-cover": "Add cover image to minicard", + "add-cover": "Přidat titulní obrázek k minikartě", "add-label": "Přidat štítek", "add-list": "Přidat sloupec", - "add-after-list": "Add After List", + "add-after-list": "Přidat za seznam", "add-members": "Přidat členy", "added": "Přidán", "addMemberPopup-title": "Členové", @@ -143,13 +143,13 @@ "attachmentDeletePopup-title": "Smazat přílohu?", "attachments": "Přílohy", "auto-watch": "Automaticky sleduj tabla když jsou vytvořena", - "avatar-too-big": "The avatar is too large (__size__ max)", + "avatar-too-big": "Avatar je příliš velký (__size__ max)", "back": "Zpět", "board-change-color": "Změnit barvu", - "board-change-background-image": "Change Background Image", - "board-background-image-url": "Background Image URL", - "add-background-image": "Add Background Image", - "remove-background-image": "Remove Background Image", + "board-change-background-image": "Změnit obrázek na pozadí", + "board-background-image-url": "URL obrázku na pozadí", + "add-background-image": "Přidat obrázek na pozadí", + "remove-background-image": "Odstranit obrázek z pozadí", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", @@ -162,9 +162,9 @@ "board-public-info": "Toto tablo bude veřejné.", "board-drag-drop-reorder-or-click-open": "Přetažením změníte pořadí ikon tabel. Kliknutím otevřete tablo.", "boardChangeColorPopup-title": "Změnit pozadí tabla", - "boardChangeBackgroundImagePopup-title": "Change Background Image", + "boardChangeBackgroundImagePopup-title": "Změnit obrázek na pozadí", "allBoardsChangeColorPopup-title": "Změnit barvu", - "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", + "allBoardsChangeBackgroundImagePopup-title": "Změnit obrázek na pozadí", "boardChangeTitlePopup-title": "Přejmenovat tablo", "boardChangeVisibilityPopup-title": "Upravit viditelnost", "boardChangeWatchPopup-title": "Změnit sledování", @@ -532,8 +532,8 @@ "normal": "Normální", "normal-desc": "Může zobrazovat a upravovat karty. Nemůže měnit nastavení.", "not-accepted-yet": "Pozvánka ještě nebyla přijmuta", - "notify-participate": "Receive updates to any cards you participate as creator or member", - "notify-watch": "Dostane aktualitace to všech tabel, sloupců nebo karet, které sledujete", + "notify-participate": "Dostanete aktualizace o všech kartách, kterých se účastníte jako tvůrce nebo člen", + "notify-watch": "Dostane aktualizace o všech tabel, sloupců nebo karet, které sledujete", "optional": "volitelný", "or": "nebo", "page-maybe-private": "Tato stránka může být soukromá. Můžete ji zobrazit po přihlášení.", @@ -550,7 +550,7 @@ "public": "Veřejný", "public-desc": "Toto tablo je veřejné. Je viditelné pro každého, kdo na něj má odkaz a bude zobrazeno ve vyhledávačích jako je Google. Pouze vybraní uživatelé ho mohou upravovat.", "quick-access-description": "Pro přidání odkazu do této lišty označ tablo hvězdičkou.", - "remove-cover": "Remove cover image from minicard", + "remove-cover": "Odstranit titulní obrázek z minikarty", "remove-from-board": "Odstranit z tabla", "remove-label": "Odstranit štítek", "listDeletePopup-title": "Smazat sloupec?", @@ -703,8 +703,8 @@ "accounts": "Účty", "accounts-allowEmailChange": "Povolit změnu Emailu", "accounts-allowUserNameChange": "Povolit změnu uživatelského jména", - "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", - "tableVisibilityMode" : "Boards visibility", + "tableVisibilityMode-allowPrivateOnly": "Viditelnost tabel: Povolit pouze soukromé tabla", + "tableVisibilityMode" : "Viditelnost tabel", "createdAt": "Vytvořeno v", "modifiedAt": "Modifikováno", "verified": "Ověřen", @@ -739,10 +739,10 @@ "deposit-subtasks-board": "Vložit podúkoly do tohoto tabla", "deposit-subtasks-list": "Landing list for subtasks deposited here:", "show-parent-in-minicard": "Ukázat předka na minikartě", - "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Cover image on minicard", - "badge-attachment-on-minicard": "Count of attachments on minicard", - "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", + "description-on-minicard": "Popis na minikartě", + "cover-attachment-on-minicard": "Titulní obrázek na minikartě", + "badge-attachment-on-minicard": "Počet příloh na minikartě", + "card-sorting-by-number-on-minicard": "Řazení karet podle čísla na minikartě", "prefix-with-full-path": "Prefix s celou cestou", "prefix-with-parent": "Prefix s předkem", "subtext-with-full-path": "Podtext s celou cestou", @@ -884,7 +884,7 @@ "error-ldap-login": "Během přihlašování nastala chyba", "display-authentication-method": "Zobraz způsob ověřování", "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Zobraz způsob ověřování", + "default-authentication-method": "Výchozí způsob ověřování", "duplicate-board": "Duplikovat tablo", "org-number": "Počet organizací je:", "team-number": "Počet týmů je:", @@ -974,7 +974,7 @@ "myCardsViewChange-title": "My Cards View", "myCardsViewChangePopup-title": "My Cards View", "myCardsViewChange-choice-boards": "Tabla", - "myCardsViewChange-choice-table": "Table", + "myCardsViewChange-choice-table": "Tabulka", "myCardsSortChange-title": "Pořadí mých karet", "myCardsSortChangePopup-title": "Pořadí mých karet", "myCardsSortChange-choice-board": "Podle tabla", @@ -1100,13 +1100,13 @@ "label-names": "Štítek jména", "archived-at": "archivováno", "sort-cards": "Třídit", - "sort-is-on": "Sort is on", + "sort-is-on": "Řazení je zapnuté", "cardsSortPopup-title": "Třídit", "due-date": "Požadovaný termín", "server-error": "Chyba na serveru", "server-error-troubleshooting": "Odešlete prosím chybu, kterou server vygeneroval.\nV případě instalace přes snap spusťte: `sudo snap logs wekan.wekan`\nV případě instalace přes Docker spusťte: `sudo docker logs wekan-app`", "title-alphabetically": "Nadpis (Abecedně)", - "created-at-newest-first": "Vyvtořeno (Od nejnovějších)", + "created-at-newest-first": "Vytvořeno (Od nejnovějších)", "created-at-oldest-first": "Vytvořeno (Od nejstarších)", "links-heading": "Odkazy", "hide-system-messages-of-all-users": "Skrýt systémové zprávy všech uživatelů", @@ -1118,7 +1118,7 @@ "custom-field-stringtemplate-separator": "Oddělovač (pro mezeru použijte nebo  )", "custom-field-stringtemplate-item-placeholder": "Stiskněte enter pro přidání více položek", "creator": "Tvůrce", - "creator-on-minicard": "Creator on minicard", + "creator-on-minicard": "Tvůrce na minikartě", "filesReportTitle": "Report souborů", "reports": "Reporty", "rulesReportTitle": "Report pravidel", @@ -1141,7 +1141,7 @@ "delete-org-warning-message": "Tuto organizaci není možné smazat, protože do ní patří uživatel(é)", "delete-team-warning-message": "Tento tým není možné smazat, protože do nej patří uživatel(é)", "subject": "Subject", - "details": "Details", + "details": "Podrobnosti", "carbon-copy": "Carbon Copy (Cc:)", "ticket": "Ticket", "tickets": "Tickets", @@ -1155,17 +1155,17 @@ "request": "Request", "requests": "Requests", "help-request": "Help Request", - "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "Card Details", - "add-teams": "Add teams", - "add-teams-label": "Added teams are displayed below:", - "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "Confirm", + "editCardSortOrderPopup-title": "Změnit řazení", + "cardDetailsPopup-title": "Podrobnosti karty", + "add-teams": "Přidat týmy", + "add-teams-label": "Přidané týmy jsou zobrazeny zde:", + "remove-team-from-table": "Opravdu chcete odstranit tento tým z tabla ?", + "confirm-btn": "Potvrdit", "remove-btn": "Odstranit", - "filter-card-title-label": "Filter by card title", + "filter-card-title-label": "Filtrovat pomocí názvů karet", "invite-people-success": "Invitation to register sent with success", "invite-people-error": "Error while sending invitation to register", - "can-invite-if-same-mailDomainName": "Email domain name", + "can-invite-if-same-mailDomainName": "Emailová doména", "to-create-teams-contact-admin": "To create teams, please contact the administrator.", "Node_heap_total_heap_size": "Node heap: total heap size", "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", @@ -1224,29 +1224,29 @@ "if-you-already-have-an-account": "If you already have an account", "register": "Register", "forgot-password": "Forgot password", - "minicardDetailsActionsPopup-title": "Card Details", + "minicardDetailsActionsPopup-title": "Podrobnosti karty", "Mongo_sessions_count": "Mongo sessions count", "change-visibility": "Upravit viditelnost", - "max-upload-filesize": "Max upload filesize in bytes:", - "allowed-upload-filetypes": "Allowed upload filetypes:", - "max-avatar-filesize": "Max avatar filesize in bytes:", + "max-upload-filesize": "Maximální velikost nahraného souboru v bajtech:", + "allowed-upload-filetypes": "Povolené typy nahraných souborů:", + "max-avatar-filesize": "Maximální velikost avatara v bajtech:", "allowed-avatar-filetypes": "Allowed avatar filetypes:", - "invalid-file": "If filename is invalid, upload or rename is cancelled.", - "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", - "drag-board": "Drag board", - "translation-number": "The number of custom translation strings is:", - "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", - "newTranslationPopup-title": "New custom translation string", - "editTranslationPopup-title": "Edit custom translation string", - "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Translation", + "invalid-file": "Pokud je název souboru neplatný, nahrávání nebo přejmenovávání se zruší.", + "preview-pdf-not-supported": "Vaše zařízení nepodporuje zobrazení PDF. Zkuste soubor stáhnout.", + "drag-board": "Přetáhnout tablo", + "translation-number": "Počet vlastní překladů je:", + "delete-translation-confirm-popup": "Opravdu chcete smazat tento vlastní překlad? Tuto akci nelze vrátit zpět.", + "newTranslationPopup-title": "Nový vlastní překlad", + "editTranslationPopup-title": "Upravit vlastní překlad", + "settingsTranslationPopup-title": "Smazat tento vlastní překlad?", + "translation": "Překlad", "text": "Text", - "translation-text": "Translation text", - "show-at-minicard": "Show at minicard", + "translation-text": "Text překladu", + "show-at-minicard": "Zobrazit na minikartě", "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", "convert-to-markdown": "Convert to markdown", "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", "collapse": "Sbalit", - "uncollapse": "Uncollapse" + "uncollapse": "Rozbalit" } diff --git a/imports/reactiveCache.js b/imports/reactiveCache.js index 11e63b238..ebacc96cd 100644 --- a/imports/reactiveCache.js +++ b/imports/reactiveCache.js @@ -128,9 +128,6 @@ ReactiveCacheServer = { return ret; }, getUsers(selector = {}, options = {}, getQuery = false) { - // getUsers(selector, options, getQuery) { - // let ret = Users.find(undefined, {}); - // console.log("getUser count: ", ret.count()) let ret = Users.find(selector, options); if (getQuery !== true) { ret = ret.fetch(); diff --git a/models/cards.js b/models/cards.js index cfc41d322..ec0173d49 100644 --- a/models/cards.js +++ b/models/cards.js @@ -351,7 +351,7 @@ Cards.attachSchema( }, 'poker.question': { type: Boolean, - defaultValue: false, + optional: true, }, 'poker.one': { /** @@ -359,7 +359,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.two': { /** @@ -367,7 +366,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.three': { /** @@ -375,7 +373,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.five': { /** @@ -383,7 +380,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.eight': { /** @@ -391,7 +387,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.thirteen': { /** @@ -399,7 +394,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.twenty': { /** @@ -407,7 +401,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.forty': { /** @@ -415,7 +408,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.oneHundred': { /** @@ -423,7 +415,6 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.unsure': { /** @@ -431,16 +422,14 @@ Cards.attachSchema( */ type: [String], optional: true, - defaultValue: [], }, 'poker.end': { type: Date, optional: true, - defaultValue: null, }, 'poker.allowNonBoardMembers': { type: Boolean, - defaultValue: false, + optional: true, }, 'poker.estimation': { /** @@ -993,15 +982,16 @@ Cards.helpers({ }, parentCard() { - if (this.parentId === '') { - return null; + let ret = null; + if (this.parentId) { + ret = ReactiveCache.getCard(this.parentId); } - return ReactiveCache.getCard(this.parentId); + return ret; }, parentCardName() { let result = ''; - if (this.parentId !== '') { + if (this.parentId) { const card = ReactiveCache.getCard(this.parentId); if (card) { result = card.title; @@ -1013,7 +1003,7 @@ Cards.helpers({ parentListId() { const result = []; let crtParentId = this.parentId; - while (crtParentId !== '') { + while (crtParentId) { const crt = ReactiveCache.getCard(crtParentId); if (crt === null || crt === undefined) { // maybe it has been deleted @@ -1033,7 +1023,7 @@ Cards.helpers({ const resultId = []; const result = []; let crtParentId = this.parentId; - while (crtParentId !== '') { + while (crtParentId) { const crt = ReactiveCache.getCard(crtParentId); if (crt === null || crt === undefined) { // maybe it has been deleted @@ -1059,7 +1049,11 @@ Cards.helpers({ }, isTopLevel() { - return this.parentId === ''; + let ret = false; + if (this.parentId) { + ret = true; + } + return ret; }, isLinkedCard() { diff --git a/models/server/createWorkbook.js b/models/server/createWorkbook.js index 493f678cd..28b1c45f8 100644 --- a/models/server/createWorkbook.js +++ b/models/server/createWorkbook.js @@ -1,4 +1,4 @@ -import Excel from 'exceljs'; +import Excel from '@wekanteam/exceljs'; export const createWorkbook = function() { return new Excel.Workbook(); diff --git a/models/trelloCreator.js b/models/trelloCreator.js index e0efa3aac..2d445bc46 100644 --- a/models/trelloCreator.js +++ b/models/trelloCreator.js @@ -450,9 +450,9 @@ export class TrelloCreator { } }; if (att.url) { - Attachment.load(att.url, opts, cb, true); + Attachments.load(att.url, opts, cb, true); } else if (att.file) { - Attachment.write(att.file, opts, cb, true); + Attachments.insert(att.file, opts, cb, true); } }); diff --git a/models/users.js b/models/users.js index b6bf53793..44b012d29 100644 --- a/models/users.js +++ b/models/users.js @@ -687,14 +687,11 @@ Users.helpers({ return ''; }, orgIdsUserBelongs() { + let ret = ''; if (this.orgs) { - return this.orgs - .map(function (org) { - return org.orgId; - }) - .join(','); + ret = this.orgs.map(org => org.orgId).join(','); } - return ''; + return ret; }, teamsUserBelongs() { if (this.teams) { @@ -708,14 +705,11 @@ Users.helpers({ return ''; }, teamIdsUserBelongs() { + let ret = ''; if (this.teams) { - return this.teams - .map(function (team) { - return team.teamId; - }) - .join(','); + ret = this.teams.map(team => team.teamId).join(','); } - return ''; + return ret; }, boards() { return Boards.userBoards(this._id, null, {}, { sort: { sort: 1 } }); @@ -1254,14 +1248,14 @@ Meteor.methods({ check(boardId, String); check(listId, String); check(width, Number); - const user = Meteor.user(); + const user = ReactiveCache.getCurrentUser(); user.setListWidth(boardId, listId, width); }, applySwimlaneHeight(boardId, swimlaneId, height) { check(boardId, String); check(swimlaneId, String); check(height, Number); - const user = Meteor.user(); + const user = ReactiveCache.getCurrentUser(); user.setSwimlaneHeight(boardId, swimlaneId, height); }, }); diff --git a/models/wekanCreator.js b/models/wekanCreator.js index a2fc789bd..b429a9427 100644 --- a/models/wekanCreator.js +++ b/models/wekanCreator.js @@ -471,9 +471,9 @@ export class WekanCreator { } }; if (att.url) { - Attachment.load(att.url, opts, cb, true); + Attachments.load(att.url, opts, cb, true); } else if (att.file) { - Attachment.write(att.file, opts, cb, true); + Attachments.insert(att.file, opts, cb, true); } }); } diff --git a/package-lock.json b/package-lock.json index 8c0be881c..69cbac24e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "wekan", - "version": "v7.50.0", + "version": "v7.54.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "requires": { "regenerator-runtime": "^0.14.0" } @@ -108,6 +108,25 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" }, + "@wekanteam/dragscroll": { + "version": "github:wekan/dragscroll#6ea215c8cdbde9362ecba8ffb72ce9f9fde842d2", + "from": "github:wekan/dragscroll" + }, + "@wekanteam/exceljs": { + "version": "github:wekan/exceljs#e0229907e7a81bc3fe6daf4e42b1fdfbecdcb7cb", + "from": "github:wekan/exceljs", + "requires": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + } + }, "@wekanteam/html-to-markdown": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@wekanteam/html-to-markdown/-/html-to-markdown-1.0.2.tgz", @@ -514,9 +533,9 @@ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" }, "dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" }, "debug": { "version": "4.3.4", @@ -581,9 +600,9 @@ } }, "dompurify": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.5.tgz", - "integrity": "sha512-FgbqnEPiv5Vdtwt6Mxl7XSylttCC03cqP5ldNT2z+Kj0nLxPHJH4+1Cyf5Jasxhw93Rl4Oo11qRoUV72fmya2Q==" + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==" }, "domutils": { "version": "2.8.0", @@ -697,21 +716,6 @@ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" }, - "exceljs": { - "version": "git+https://github.com/exceljs/exceljs.git#5bed18b45e824f409b08456b59b87430ded023ab", - "from": "git+https://github.com/exceljs/exceljs.git", - "requires": { - "archiver": "^5.0.0", - "dayjs": "^1.8.34", - "fast-csv": "^4.3.1", - "jszip": "^3.10.1", - "readable-stream": "^3.6.0", - "saxes": "^5.0.1", - "tmp": "^0.2.0", - "unzipper": "^0.10.11", - "uuid": "^8.3.0" - } - }, "extsprintf": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", @@ -737,9 +741,9 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-xml-parser": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", - "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "requires": { "strnum": "^1.0.5" } @@ -2369,9 +2373,9 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" }, "once": { "version": "1.4.0", @@ -2471,9 +2475,9 @@ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { "side-channel": "^1.0.6" } diff --git a/package.json b/package.json index b5485bfd6..d3b9776db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v7.50.0", + "version": "v7.54.0", "description": "Open-Source kanban", "private": true, "repository": { @@ -17,19 +17,20 @@ "sinon": "^13.0.2" }, "dependencies": { - "@babel/runtime": "^7.24.7", + "@babel/runtime": "^7.25.0", "@mapbox/node-pre-gyp": "^1.0.10", "@rwap/jquery-ui-touch-punch": "^1.0.11", + "@wekanteam/dragscroll": "github:wekan/dragscroll", + "@wekanteam/exceljs": "github:wekan/exceljs", "@wekanteam/html-to-markdown": "^1.0.2", "@wekanteam/meteor-globals": "^1.1.4", "@wekanteam/meteor-reactive-cache": "^1.0.6", "ajv": "^6.12.6", "bcryptjs": "^2.4.3", "bson": "^4.5.2", - "dompurify": "^2.5.5", + "dompurify": "^2.5.6", "es6-promise": "^4.2.4", "escape-string-regexp": "^5.0.0", - "exceljs": "git+https://github.com/exceljs/exceljs.git", "fibers": "^5.0.3", "file-type": "^16.5.4", "filesize": "^8.0.7", @@ -50,7 +51,7 @@ "page": "^1.11.6", "papaparse": "^5.3.1", "pretty-ms": "^7.0.1", - "qs": "^6.12.1", + "qs": "^6.13.0", "simpl-schema": "^3.4.6", "source-map-support": "^0.5.20", "uuid": "^8.3.2" diff --git a/public/api/wekan.html b/public/api/wekan.html index 07ea00f26..fa40b3621 100644 --- a/public/api/wekan.html +++ b/public/api/wekan.html @@ -7,7 +7,7 @@ - Wekan REST API v7.50 + Wekan REST API v7.54 @@ -1548,7 +1548,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc