mirror of
https://github.com/wekan/wekan.git
synced 2026-11-08 03:22:32 -05:00
Card loading is no longer an admin-configurable toggle. WeKan decides
per board by size ('auto', the default): a board over the threshold
(default 500 cards, CARDS_LOADING_LAZY_THRESHOLD) loads only visible
cards via windows; smaller boards keep loading all cards (unchanged,
fully featured). The server computes the mode per board and publishes it
(boardCardsLoadingMode -> boardCardLoadingModes) so client rendering
agrees; isLazyCards is now per-board.
Lazy windows now publish comments/attachments/checklists/checklistItems
with ONE cursor per window instead of one per card (same N+1 fix as
eager mode), and an open card subscribes to its own live children
(openCardData) so it is complete even when outside/just-added-to a
window. Operators can still force CARDS_LOADING=all|lazy|auto.
Removed the Admin/Features card-loading dropdown; pure decision logic in
models/lib/cardsLoading.js (resolveCardsLoadingMode now defaults to
'auto', plus effectiveBoardCardsMode + threshold) with updated unit
tests. New i18n key cards-loading-auto across locales.
94 lines
4.4 KiB
Plaintext
94 lines
4.4 KiB
Plaintext
template(name="adminFeatures")
|
|
.setting-content
|
|
unless currentUser.isAdmin
|
|
| {{_ 'error-notAuthorized'}}
|
|
else
|
|
.content-title.ext-box
|
|
span
|
|
span.emoji-icon
|
|
i.fa.fa-flask
|
|
| {{_ 'features'}}
|
|
.content-body
|
|
.side-menu
|
|
ul
|
|
li(class="{{#if isPerformanceActive}}active{{/if}}")
|
|
a.js-features-menu(data-id="performance")
|
|
span.emoji-icon
|
|
i.fa.fa-tachometer
|
|
| {{_ 'features-performance'}}
|
|
li(class="{{#if isSecurityActive}}active{{/if}}")
|
|
a.js-features-menu(data-id="security")
|
|
span.emoji-icon
|
|
i.fa.fa-shield
|
|
| {{_ 'features-security'}}
|
|
li(class="{{#if isNotificationsActive}}active{{/if}}")
|
|
a.js-features-menu(data-id="notifications")
|
|
span.emoji-icon
|
|
i.fa.fa-bell
|
|
| {{_ 'features-notifications'}}
|
|
.main-body
|
|
if isPerformanceActive
|
|
ul.setting-detail
|
|
li.layout-form
|
|
.title {{_ 'cards-loading'}}
|
|
p.description {{_ 'cards-loading-description'}}
|
|
if isSecurityActive
|
|
ul.setting-detail
|
|
li
|
|
a.flex.js-toggle-render-links-as-plain-text
|
|
.materialCheckBox(class="{{#if renderLinksAsPlainText}}is-checked{{/if}}")
|
|
span {{_ 'render-links-as-plain-text'}}
|
|
p.description {{_ 'render-links-as-plain-text-description'}}
|
|
li
|
|
a.flex.js-toggle-always-show-code-as-text
|
|
.materialCheckBox(class="{{#if alwaysShowCodeAsText}}is-checked{{/if}}")
|
|
span {{_ 'always-show-code-as-text'}}
|
|
p.description {{_ 'always-show-code-as-text-description'}}
|
|
li
|
|
a.flex.js-toggle-disable-all-import
|
|
.materialCheckBox(class="{{#if disableAllImport}}is-checked{{/if}}")
|
|
span {{_ 'disable-all-import'}}
|
|
p.description {{_ 'disable-all-import-description'}}
|
|
li
|
|
a.flex.js-toggle-disable-all-export
|
|
.materialCheckBox(class="{{#if disableAllExport}}is-checked{{/if}}")
|
|
span {{_ 'disable-all-export'}}
|
|
p.description {{_ 'disable-all-export-description'}}
|
|
li
|
|
a.flex.js-toggle-disable-import-avatars
|
|
.materialCheckBox(class="{{#if disableImportAvatars}}is-checked{{/if}}")
|
|
span {{_ 'disable-import-avatars'}}
|
|
p.description {{_ 'disable-import-avatars-description'}}
|
|
li
|
|
a.flex.js-toggle-disable-export-avatars
|
|
.materialCheckBox(class="{{#if disableExportAvatars}}is-checked{{/if}}")
|
|
span {{_ 'disable-export-avatars'}}
|
|
p.description {{_ 'disable-export-avatars-description'}}
|
|
li
|
|
a.flex.js-toggle-anonymize-import-users
|
|
.materialCheckBox(class="{{#if anonymizeImportUsers}}is-checked{{/if}}")
|
|
span {{_ 'anonymize-import-users'}}
|
|
p.description {{_ 'anonymize-import-users-description'}}
|
|
li
|
|
a.flex.js-toggle-anonymize-export-users
|
|
.materialCheckBox(class="{{#if anonymizeExportUsers}}is-checked{{/if}}")
|
|
span {{_ 'anonymize-export-users'}}
|
|
p.description {{_ 'anonymize-export-users-description'}}
|
|
if isNotificationsActive
|
|
ul.setting-detail
|
|
li
|
|
a.flex.js-toggle-disable-activities
|
|
.materialCheckBox(class="{{#if disableActivities}}is-checked{{/if}}")
|
|
span {{_ 'disable-activities'}}
|
|
p.description {{_ 'disable-activities-description'}}
|
|
li
|
|
a.flex.js-toggle-disable-notifications
|
|
.materialCheckBox(class="{{#if disableNotifications}}is-checked{{/if}}")
|
|
span {{_ 'disable-notifications'}}
|
|
p.description {{_ 'disable-notifications-description'}}
|
|
li
|
|
a.flex.js-toggle-disable-watch
|
|
.materialCheckBox(class="{{#if disableWatch}}is-checked{{/if}}")
|
|
span {{_ 'disable-watch'}}
|
|
p.description {{_ 'disable-watch-description'}}
|