Commit Graph
238 Commits
Author SHA1 Message Date
Lauri Ojansivu bb6b0d5477 Member Settings: optional "Submit editors with Enter" (per-user, off by default).
#4236 made every multi-line editor submit only on Ctrl/Cmd+Enter (plain Enter
= newline) so titles could be multi-line, but that removed the fast
Enter-to-save title workflow some users rely on (v10 email feedback). Add a
per-user preference in the Member Settings (Change Settings) popup, saved to
profile.submitOnEnter and OFF by default: when on, plain Enter submits the card
title, description and other inlined forms, and Shift+Enter inserts a newline;
when off, behaviour is unchanged (Ctrl/Cmd+Enter saves).

The rule stays in the single pure isSubmitKey(event, {submitOnEnter}); the card
title, the card-description override and the shared client/lib/inlinedform.js
all route through it and read the preference from the current user. New toggle
+ helper + toggleSubmitOnEnter method + schema field, i18n (en, fi), and
editorSubmitKey.test.cjs extended with positive + negative opt-in cases.

Thanks to xet7 !

Related to #4236.
2026-07-18 18:14:33 +03:00
Lauri Ojansivu 8cb4050cf2 Member menu: remove the Notifications entry (duplicates the header bell icon).
The member-menu "Notifications" item and its js-notifications-drawer-toggle
handler toggled the same notifications drawer as the header bell icon
(notifications.js), so it was a duplicate. Remove the menu entry and its
now-unused handler; the header bell is unchanged.
2026-07-18 02:41:47 +03:00
Lauri Ojansivu 08a2e5525e Change Avatar popup: Upload button uses theme colors (blue bg, white text).
Add the .primary class to both "Upload an avatar" buttons so they use the
theme primary-button style (default #005377 blue background + white text,
overridden by the board/global theme color) instead of the plain grey/black
default button.
2026-07-18 02:21:16 +03:00
Lauri Ojansivu aa15e72682 Member Settings / Font: show the preview pangram below the font-name buttons.
Move the "The quick brown fox ... 0123456789" preview from the bottom of the
popup to directly below the font-name buttons.
2026-07-18 02:18:25 +03:00
Lauri Ojansivu bd8e417be1 Member Settings / Font: font-name + size buttons, immediate apply (no dropdowns).
Redesign the Font popup:
- Font: one button per installed font, each shown IN ITS OWN font (via inline
  style), plus a Default button. Clicking a font applies it immediately.
- Size: a row of buttons ordered by percent — smaller on the left, 100%
  (Default) in the middle, larger on the right. Clicking a size applies it
  immediately.
- Colors: the text/background color wheels now apply immediately on change /
  reset. Removed the Save button (everything applies on click).

New .ui-font-btn / .ui-font-size-btn styling (with .active) in labels.css.
Tests updated in tests/uiFonts.test.cjs.
2026-07-18 02:16:53 +03:00
Lauri Ojansivu 22c7d5376b Member Settings / Font / Color: custom text + background color (#4759).
The Font popup now has a color wheel for the text color and one for the text
background color, each with an Unset button to go back to default. Values are
free choices (native <input type=color>), validated server-side as #rrggbb
hex (models/lib/uiFonts isHexColor6) so only a strict hex ever reaches a CSS
value — no injection surface. An unset/invalid value clears that color.

- profile.uiTextColor / profile.uiTextBgColor schema (hex-validated) + getters;
  setUiColors(textColor, bgColor) method ($set valid hex, $unset otherwise).
- changeFontPopup: two color wheels + reset buttons; live preview reflects
  font, size, text color and background color.
- Applied UI-wide via --wekan-ui-text-color / --wekan-ui-bg-color CSS variables
  + has-ui-text-color / has-ui-bg-color body classes (uiFont.js + uiFont.css).
- i18n text-color / text-background-color; tests extended (hex + negatives +
  source guards).

Part of #4759.
2026-07-17 21:15:51 +03:00
Lauri Ojansivu 3c9524f61a Member Settings / Font: pick an installed font + preset size (#4759).
New "Font" entry in the member menu opens a popup with a dropdown of fonts
DETECTED as actually installed in the browser (no free typing) and a Font
size dropdown of sensible presets (Smaller..Largest, no typed numbers). Both
have a Default option that unsets the custom choice.

Security: font names and size keys are validated server-side against a
curated whitelist / preset list (models/lib/uiFonts.js), so only a known safe
font name and a preset percentage ever reach the DOM. Labels are plain text
(Blaze-escaped) — never HTML or markdown. No CSS-injection surface.

- models/lib/uiFonts.js: UI_FONTS whitelist + SAFE_FONT_RE + isKnownFont /
  fontFamilyValue and UI_FONT_SIZES presets + isKnownFontSize / fontSizeValue.
- client/lib/fontDetector.js: canvas width-comparison detection of installed
  fonts, filtered to the whitelist.
- profile.uiFont / profile.uiFontSize schema + getters; setUiFont /
  setUiFontSize methods (validated, null/default unsets).
- changeFontPopup (font + size dropdowns, both with Default) wired in
  userHeader.js; applied UI-wide via CSS variables in uiFont.js + uiFont.css
  (marker body classes), wired into client/features/main.js + client/styles.js.
- i18n change-font/font/font-default/font-size(+presets); tests/uiFonts.test.cjs
  (pure + negatives + source guards) wired into test:unit:node.

This is a Member Settings feature (not an Admin Panel option).

Fixes #4759.
2026-07-17 21:15:39 +03:00
Lauri Ojansivu d0a1e43f36 Select Color: two-level dropdown picker + custom colors (#5778).
Both Board Settings and Member Settings Change Color now use a shared
category -> theme two-level dropdown picker with custom color wheels for the
flat (1 color) and clear (2 colors, a color slide) categories; dark/special
are fixed. Custom colors are validated server-side as #rrggbb, stored in
board.customThemeColors / profile.globalThemeCustomColors, and applied as
CSS variables (--theme-accent / --theme-accent-2) consumed by customTheme.css
to recolor the header, primary buttons and sidebar button.

- client/components/main/themeColorPicker.{jade,js}: shared picker, scope
  "board" or "global", reusing the #5514 native color wheel + themeCategories.
- board.setColor(color, custom) + setGlobalThemeColor(color, custom): validate
  via isValidCustomColors (flat/clear + count + hex) before storing.
- boardChangeColorPopup and changeColorPopup now render the shared picker;
  removed their old swatch-list helpers/events.
- globalThemeColor.js: apply custom colors as :root CSS variables (board own
  colors on a board, else the user global override) + marker body classes;
  customTheme.css consumes them.
- Wire globalThemeColor.js / themeColorPicker into client/features/main.js and
  customTheme.css into client/styles.js. This also fixes globalThemeColor.js
  never having been imported (so the #5778 override now actually loads).
- i18n theme / theme-category[-flat/clear/dark/special]; tests
  themeColorPicker.test.cjs + updated globalThemeColor.test.cjs.

Fixes #5778.
2026-07-17 20:58:39 +03:00
Lauri Ojansivu eab1546b88 Member Menu / Change Color: global per-user theme override (#5778).
A new "Change Color" entry in the member menu works like Board Settings /
Change Color, but is a per-user GLOBAL override saved to the profile
(profile.globalThemeColor). The chosen color theme applies to the whole UI —
All Boards, Search All Boards, Admin Panel, My Cards, etc. — via a
board-color-<name> class on <body> and the header, so a user can pick a dark
theme (dark/midnight/moderndark/exodark/cleandark) or any other theme
everywhere. The first popup entry clears the override.

- models/users.js: profile.globalThemeColor field + getGlobalThemeColor /
  globalThemeColorClass / setGlobalThemeColor helpers.
- server/models/users.js: setGlobalThemeColor method, validated against
  BOARD_COLORS (rejects unknown colors so no arbitrary CSS class is injected)
  and auth-guarded; null/empty clears it.
- client/components/main/globalThemeColor.js: Tracker autorun that adds the
  class to <body> on non-board pages; on a board the board own color wins, so
  the global class is cleared there to avoid two themes clashing.
- header.jade: #header and #header-quick-access fall back to the user global
  theme class when not on a board (covers the #header-specific color rules).
- Change Color menu entry + changeColorPopup (color swatches + clear option),
  wired in userHeader.js.
- i18n change-color / theme-default; tests/globalThemeColor.test.cjs wired
  into test:unit:node.
2026-07-17 20:32:40 +03:00
Lauri Ojansivu db90fb9e61 Members: distinguish imported placeholders and inactive members on the avatar + sidebar (Increment 5)
Make it obvious which board members are backed by a real account and which are not,
both on card avatars and in the right sidebar member list.

- userAvatar (js/jade/css): the avatar gets an 'imported-member' class (dashed grey ring
  + amber '?' corner badge) for un-reconciled board-import placeholders
  (authenticationMethod:'imported'), and an 'inactive-member' class (greyscale + dim +
  grey badge) for members deactivated on the board (e.g. a person not in LDAP after
  reconciliation). A placeholder is usually both; a real active account gets neither. The
  tooltip explains the state.
- boards.js membersForSidebar(): active members first (as before) then the inactive /
  imported ones appended, and sidebar.jade uses it, so the member list shows EVERYONE and
  which are active vs not instead of hiding inactive members.
- i18n: imported-member-no-account, inactive-member.

Thanks to xet7.
2026-07-13 09:16:32 +03:00
Lauri Ojansivu e014d5c816 Fix #4394: Register / Forgot Password links stay hidden after a failed login
Security: with "Self Registration" and "Forgot Password" disabled in the Admin
Panel, the Register (.at-signup-link) and Forgot Password (.at-pwd-link) links
were hidden only by a one-shot jQuery .hide() in userFormsLayout.onRendered.
When a login failed (notably the LDAP "User not Found" path), useraccounts
re-rendered the form and recreated those link nodes without the inline
display:none, so the links reappeared and exposed registration / password-reset
flows that were meant to be off.

The disable state is now also reflected as a class on the stable <body>
ancestor (registration-disabled / forgotpwd-disabled) with matching CSS in
userForm.css. Because the class sits on <body>, the rule re-hides every copy of
the links that useraccounts recreates after a failed login, instead of relying
on a single inline style that the re-render dropped.

Thanks to Alsterdetektive1 and xet7.
2026-07-09 09:45:53 +03:00
Lauri OjansivuandClaude Opus 4.8 4a7df37459 fix: login/register page not scrollable on mobile — sign-up link unreachable
On phones body.mobile-mode pins <body> to position:fixed + height:100vh (an
iOS board-view anti-bounce fix). The auth pages (userFormsLayout) have no
inner #content scroller, and .auth-layout/.auth-dialog were sized to the
viewport height, so the page was trapped at 100vh: the content below the
form — the sign-up/sign-in link, legal notice and language selector — could
not be scrolled into view, and the on-screen keyboard covered it.

userFormsLayout now tags <body> with .userform-layout while mounted, and CSS
lets those pages scroll as a normal document on mobile (position:static,
height:auto, min-height:100vh) with the auth layout/dialog growing to their
content. Scoped to .userform-layout so the board-view mobile lock is
unchanged. Removed on destroy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 05:07:22 +03:00
Lauri OjansivuandClaude Opus 4.8 0ddc47a0db fix: changing UI language had no effect for region/script-tagged languages
The custom tap:i18n reimplementation registered each language's resource
bundle under the raw Wekan tag, but i18next (cleanCode: true) resolves and
looks translations up under a normalised code. For region/script-tagged and
legacy underscore tags (zh-CN, zh-Hans, ar-DZ, af_ZA, en_AU, ...) the stored
code and the lookup code disagreed, so the bundle was never found and the UI
silently fell back to English while simple tags (de, fr) kept working.

Normalise every i18next boundary (supportedLngs, addResourceBundle,
changeLanguage, t) through one helper (toI18nCode): underscores -> hyphens
and i18next's formatLanguageCode, so storage and lookup always agree.
Safely unwrap ES-module-namespace JSON imports without mistaking the data's
own "default" translation key for a module default export. Surface failed
language switches in the user header / login form instead of leaving the UI
silently English. Add positive and negative regression tests.

Closes #5756

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 16:51:56 +03:00
Lauri OjansivuandClaude Opus 4.8 4edbab4402 fix(#4847): allow removing a deleted user from a card's members
When a user account is deleted its entry stays in a card's members and renders
as a blank avatar. Clicking it opened cardMemberPopup, whose template
dereferenced the missing user document and failed to render, so the orphaned
member could not be removed. The popup now detects a missing user, shows a
"Deleted user" entry with the raw id, and keeps the Remove from Card control
(the remove handler keys off the member's userId, not the user doc). Adds the
deleted-user i18n string.

No automated regression — a self-evident Blaze template guard; the underlying
unassignMember removal already worked. The board-members list still hides such
entries because activeMembers() also filters not-yet-loaded users, so
surfacing board-side orphans cleanly is a separate follow-up (noted in
changelog).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 07:27:29 +03:00
Lauri OjansivuandClaude Opus 4.8 da291a5c6e Add domain-to-board sharing UI and setBoardDomains method (#5850).
Mirrors the existing add-organization-to-board feature for free-form email
domains. Adds a board-admin-gated setBoardDomains method (plus add/remove
single-domain helpers) with trim/lowercase validation, a Domains tab in the
members sidebar listing board.domains with add/remove popups, and the i18n keys.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:29 +03:00
Lauri OjansivuandClaude Opus 4.8 1ee73a0cfb All Boards / Templates: URL routes, link redirect, no auto-created templates board (#2339, #5850).
- /templates and /remaining routes (plus the home / Starred view) now address
  the All Boards left-menu sub-views via the boardListMenu Session value.
- boardList honors the route: selectedMenu initializes from boardListMenu and an
  autorun switches the view live for the three recognized menus, without
  clobbering a workspace selection.
- The Member Settings -> Templates link now opens the All Boards / Templates page
  (pathFor allboards-templates) instead of opening/creating a specific board;
  unused templatesBoardId/Slug helpers removed from userHeader.js.
- New users no longer get an auto-created Templates board at signup. The
  templates-container board (Templates + Card/List/Board Templates swimlanes) is
  now created lazily via the new ensureTemplatesBoard Meteor method, called on
  first use of the Templates view, auth-agnostic for any login method.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 8e2dacd856 Add Admin Panel setting to block avatar uploads (#4740).
Adds limitSettings.avatarsUploadBlocked (default false — avatars enabled)
to Admin Panel > Attachments > Transfer limits. When enabled, the avatar
upload option is hidden in the user avatar popup and new avatar uploads are
rejected server-side (server/permissions/avatars.js), mirroring the existing
attachmentsUploadBlocked. Useful when avatars are synced from an external
source. Thanks to xet7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:35:28 +03:00
Lauri OjansivuandClaude Opus 4.8 8062ffc39f Fix broken popup Popup.open calls; finalize popup titles; Red Strings docs ASCII art
- bookmarks: Popup.open('bookmarksPopup') resolved to a non-existent
  'bookmarksPopupPopup' template (open() appends "Popup"). Fixed both calls to
  Popup.open('bookmarks') so the bookmarksPopup template + bookmarksPopup-title
  ("Starred boards") apply.
- Removed two dead handlers that opened non-existent templates with no
  triggering button: 'click .js-import' -> boardImportBoard (boardHeader.js x2,
  sidebar.js) and 'click .js-due-cards-view-change' -> globalSearchViewChange
  (globalSearch.js; the globalSearchHeaderBar template has no such button).
- Set the error popup titles to "List width error" / "Swimlane height error".
- docs/Features/RedStrings: added ASCII-art step-by-step for drawing a line by
  dragging the connect handle, and for changing a line's relation type/color/icon.

Verified: spec 27 passes 9/9 on chromium.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 02:25:37 +03:00
Lauri OjansivuandClaude Opus 4.8 d241f9d8f6 Fix Member Settings 'Change Avatar' label styling (mis-nested inside the icon)
In the member menu popup the 'Change Avatar' label was indented one level too
deep, making it a child of the <i class="fa fa-picture-o"> icon element instead
of a sibling like every other menu entry. It therefore inherited the FontAwesome
icon font styling and rendered differently (uppercase-looking, off style). Dedent
the label so it sits directly under the <a>, matching the other items.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 15:50:59 +03:00
Lauri Ojansivu f0bce67a3b More Import Export and Rules features.
Thanks to xet7 and Claude !
2026-06-15 04:07:33 +03:00
Lauri Ojansivu 255de2062f - Improved accessibility across all pages following WCAG 2.1 AA guidelines:
- Added a visible keyboard focus indicator (`:focus-visible` outline) for links,
    buttons and form controls. The global CSS reset previously stripped all focus
    outlines, leaving keyboard users with no indication of focus (WCAG 2.4.7).
  - Added a "Skip to main content" link that lets keyboard and screen-reader users
    bypass the header chrome (WCAG 2.4.1 Bypass Blocks).
  - Added landmark roles so assistive technology can navigate page regions:
    `role="main"` on the content area, `role="navigation"` on the header quick-access
    bar, and `role="search"` on the global search form (WCAG 1.3.1).
  - Marked modals and popups as `role="dialog"` with accessible names, set
    `aria-modal="true"` on modals, and moved keyboard focus into a modal when it
    opens and back to the triggering element when it closes (WCAG 2.4.3 Focus Order).
  - Added accessible names (`aria-label`) to icon-only controls that previously had
    none: modal/popup close and back buttons, the announcement close button, the
    sidebar close/back buttons and the global search input and clear button
    (WCAG 4.1.2 Name, Role, Value).
  - Marked decorative Font Awesome icons inside labelled controls as
    `aria-hidden="true"` so they are not announced redundantly.
  - Added a screen-reader-only `.sr-only` helper class.

Thanks to xet7 and Claude !
2026-06-14 19:49:00 +03:00
Lauri Ojansivu 2536861b79 - Full right-to-left (RTL) UI for every page when an RTL language is selected
(Arabic and its variants, Persian/Farsi, Hebrew, Uyghur, Uzbek-Arabic and
  Yiddish — the languages flagged `rtl: true` in `imports/i18n/languages.js`).
  Previously only some pages flipped. The root `<html>` element now gets a
  reactive `dir="rtl"`/`dir="ltr"` attribute that follows the chosen language, so
  the whole UI mirrors at once. To make this work on every page rather than a
  handful, all directional component CSS was converted to CSS logical properties
  (`margin-left`→`margin-inline-start`, `left:`→`inset-inline-start:`,
  `text-align: left`→`text-align: start`, `float: left`→`float: inline-start`,
  and the mirror-image right/end variants) across 48 stylesheets, which flip
  automatically with `dir`. Horizontal-centering rules using
  `left: 50%` + `transform: translate(-50%, …)` were intentionally kept physical,
  since those already center correctly in both directions. The calendar view also
  renders RTL. Thanks to xet7 and Claude.
- Tests for the RTL UI. A fast, server-less `tests/rtl.test.js` (run with
  `node tests/rtl.test.js`) checks that exactly the expected languages are
  flagged `rtl: true`, that the direction helper maps each language to the right
  `dir` value, that the root `<html>` and the client keep `dir` in sync, and —
  as a regression guard — that component CSS keeps using logical properties
  (no physical `margin-left`/`float: left`/bare `left:` offsets sneak back in).
  A Playwright browser spec `tests/playwright/specs/18-rtl-layout.e2e.js` drives
  the app in both English (LTR) and Arabic (RTL) and asserts, on the boards list,
  board view, card details, my-cards / due-cards / global-search, the admin
  settings page and the login page, that the direction is correct, the
  translated text is visible, and leading-edge content (the boards menu, the
  first board list) sits on the correct side. Thanks to xet7 and Claude.
- Fixed the "Meteor unit tests" CI job hanging until its 45-minute timeout. The
  workflow set `TEST_WATCH: '0'`, but meteortesting:mocha computes
  `testWatch: TEST_WATCH || …` and the string `'0'` is truthy in JavaScript, so
  it turned on watch mode and the process never exited. Removing the env var lets
  `meteor test --once` finish and exit with the correct status.

Thanks to xet7 and Claude !

Fixes #6136,
fixes #3376,
fixes #884
2026-06-14 08:59:58 +03:00
Lauri Ojansivu 9d35870863 Copy wepica style of hide/show password to WeKan login and register pages.
Thanks to Chostakovitch and xet7 !
2026-05-30 13:43:52 +03:00
Lauri Ojansivu ce3e51b147 Fix Impersonate User. Show/Edit Avatar at Admin Panel/People/People.
Thanks to ahlgrimma, DnT1mmer, robbagithub, norrig and xet7 !

Fixes #6226,
fixes #6101,
fixes #3327,
fixes #4748
2026-04-07 09:52:41 +03:00
Harry Adel bbb8f8e51d Merge branch 'main' into meteor-3-migration
# Conflicts:
#	.meteor/packages
#	.meteor/versions
#	models/attachments.js
#	models/boards.js
#	models/server/ExporterExcelCard.js
#	package-lock.json
2026-03-24 02:22:57 +02:00
Harry Adel ddd873c7a0 Fix client runtime regressions after Meteor 3 migration 2026-03-24 01:51:20 +02:00
Lauri Ojansivu 3d6797a305 Fixed Board lost its member list or permissions.
Thanks to marylinereumont, AymenHassini19, muabila and xet7 !

Fixes #6198
2026-03-23 18:25:38 +02:00
Harry Adel 477e1c89e5 Migrate rules, activities, and remaining components to Template
Convert all remaining BlazeComponent-based components to native Meteor
Template pattern: activities, comments, all rules actions/triggers,
swimlanes, users, gantt, import, and main utility components.
2026-03-08 11:13:17 +02:00
Lauri Ojansivu 274f1309c3 Fixed unable to delete Avatar, with Meteor 3 compatible avatar and attachments fixes.
Thanks to inDane and xet7 !

Fixes #6160
2026-03-05 17:27:33 +02:00
Lauri Ojansivu 1b8b8d2eef Reverted New UI Design of WeKan v8.29 and added more fixes and performance improvements.
Thanks to xet7 !
2026-02-08 00:48:39 +02:00
copilot-swe-agent[bot]andxet7 97dd5d2064 Resolve merge conflicts by accepting PR #6131 changes
Co-authored-by: xet7 <15545+xet7@users.noreply.github.com>
2026-02-07 16:30:08 +00:00
Lauri Ojansivu 0ae9865fcb Added missing linefeeds.
Thanks to xet7 !
2026-02-07 04:19:05 +02:00
Lauri Ojansivu 7ad04f4535 Most Unicode Icons back to Font Awesome 4.7 for better accessibility. Less always visible buttons, More at ☰ Men.
Thanks to xet7 !
2026-01-28 13:02:02 +02:00
Lauri Ojansivu ad511bd137 Fixed Add member and @mentions.
Thanks to xet7 !

Fixes #6076,
fixes #6077
2026-01-20 02:28:32 +02:00
Lauri Ojansivu d30192f7f9 Show password at Login and Register pages.
Thanks to xet7 !

Fixes #6070
2026-01-17 19:40:07 +02:00
Lauri Ojansivu 5cb712bee4 Added back feature: Toggle Drag Handles. Improved positions of Add List etc buttons.
Thanks to xet7 !
2026-01-14 19:10:51 +02:00
Lauri Ojansivu e89f4d260c Fixed Change Avatar. Improved Admin Panel: People columns order, selected tab background color.
Thanks to xet7 !
2026-01-14 01:00:59 +02:00
Harry Adel 0635a663f0 Remove pwix:blaze-layout 2026-01-14 00:13:21 +02:00
Lauri Ojansivu 300b653ea3 Right top User Settings / Grey Icons. Also fixed Change Language popup.
Thanks to xet7 !
2025-12-23 01:31:02 +02:00
Lauri Ojansivu 4408eae158 feat: grey unicode icons without UI freezes 2025-12-22 23:26:30 +02:00
Lauri Ojansivu a7400dca45 More translations. Added support page to Admin Panel / Settings / Layout.
Thanks to xet7 !
2025-12-22 22:24:35 +02:00
Lauri Ojansivu e569c2957e Number of cards per list and sum of custom number field in list head.
Thanks to xet7 !

Fixes #3796
2025-12-22 21:06:44 +02:00
Lauri Ojansivu 1b6e8797ec Feature: Grey Icons. This makes WeKan very slow. Not recommended.
Thanks to xet7 !
2025-11-25 04:33:42 +02:00
Lauri Ojansivu c829c073cf Remove not working Bookmark menu option.
Thanks to xet7 !
2025-11-06 02:44:30 +02:00
Lauri Ojansivu 8711b476be Fix star board.
Thanks to xet7 !
2025-11-05 20:50:28 +02:00
Lauri Ojansivu f26d582018 Fix SECURITY ISSUE 2: Access to boards of any Orgs/Teams, and avatar permissions.
Thanks to Siam Thanat Hack (STH) !
2025-11-02 09:11:50 +02:00
Lauri Ojansivu 30620d0ca4 Some migrations and mobile fixes.
Thanks to xet7 !
2025-10-25 21:09:07 +03:00
Lauri Ojansivu 088bc16072 Font Awesome to Unicode icons. Part 4.
Thanks to xet7 !
2025-10-17 07:55:04 +03:00
Lauri Ojansivu 09631d6b0c Resize height of swimlane by dragging. Font Awesome to Unicode icons.
Thanks to xet7 !
2025-10-17 05:58:53 +03:00
Lauri Ojansivu 2947238a02 Convert Font Awesome to Unicode Icons. Part 1. In Progress.
Thanks to xet7 !
2025-10-17 02:19:43 +03:00