* fix: never reject a token response
If a token response is rejected, then the pipeline will also fail because it does not understand that error. Let the API interceptors do their job instead and simply return the old, now-invalid token which will prompt the API interceptors to store the request states and retry them afterwards.
* chore: removes unused timeoutsignal
* chore: captures the stale token before potentially clearing it
* Add null checks for editPath and name in render method
The render method now checks for the presence of both editPath and _name before rendering the button, preventing potential errors when these values are missing.
* Refactor dropdown open state handling
Replaces the public 'open' property with a private field and getter/setter to better control dropdown state. Moves popover open/close logic into the setter, removes the 'updated' lifecycle method, and conditionally renders dropdown content based on the open state.
* add opened and closed events
* dispatch opened and closed events
* Render dropdown content only when open
Introduces an _isOpen state to control rendering of the dropdown content in UmbEntityActionsBundleElement. Dropdown content is now only rendered when the dropdown is open, improving performance and preventing unnecessary DOM updates.
* Update dropdown.element.ts
* create a cache elements
* Optimize entity actions observation with IntersectionObserver
Adds an IntersectionObserver to only observe entity actions when the element is in the viewport, improving performance. Refactors element creation to use constructors, updates event handling, and ensures cleanup in disconnectedCallback.
* only observe once
* Update entity-actions-bundle.element.ts
* Update dropdown.element.ts
* Update entity-actions-bundle.element.ts
* split dropdown component
* pass compact prop
* fix label
* Update entity-actions-dropdown.element.ts
* Update entity-actions-dropdown.element.ts
---------
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>
* build(deps-dev): bump storybook from v8 to v9
* chore: run storybook v9 migrations
* chore: updates import paths for storybook-webcomponents-vite (migration)
* chore: migrates eslint for storybook config
* fix: updates old link to composed storybook so we reference the latest production uui
* chore: formats eslint config file
* chore: changes import path to build mdx stories
* chore: updates language list to reflect v16
* Refactor descendant enumeration in DeliveryApiContentIndexHelper
Improved loop condition to allow for processing of more than 10.000 descendants for indexing.
* Add failing test for original issue.
* Renamed variable for clarity.
---------
Co-authored-by: Brynjar Þorsteinsson <brynjar@vettvangur.is>
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Observe read-only guard rules in variant selector
Added observation of read-only guard rules in the workspace split view variant selector to ensure read-only cultures are updated when rules change.
* Improve save action to react to read-only rule changes
* remove unused
* Add entity-type and entity-unique condition support
Introduces new condition types for entity-type and entity-unique, including their constants, types, condition implementations, and manifests. Updates exports in core entity modules to include these new features, enabling more granular extension conditions based on entity type and uniqueness.
* register conditions
* add support for oneOf
* fix self imports
* Update manifests.ts
* remove unused
Reduce lookups needed in ConcurrentDictionaries and sort using List.Sort, make key removal O(1) by using hashsets and avoid duplicates, remove unneeded .ToList() and other minor tweaks
* Refactor section conditions into subfolders
Split section condition logic into 'section-alias' and 'section-user-permission' subfolders, each with their own constants, manifests, and types. Updated imports and manifest aggregation to use the new structure for improved modularity and maintainability.
* use const
* fix build
* Refactor section alias condition to use constant
Replaces hardcoded 'Umb.Condition.SectionAlias' strings with the UMB_SECTION_ALIAS_CONDITION_ALIAS constant across all manifests and related files. This improves maintainability and consistency by centralizing the section alias condition reference.
* Fix for https://github.com/umbraco/Umbraco-CMS/issues/18872
* Parsing added for current value
* Build fix.
* Cyclomatic complexity fix
* Resolved breaking change.
* Pass content key.
* Simplified collections.
* Added unit tests to verify behaviour.
* Allow file upload on block list.
* Added unit test verifying added property.
* Added unit test verifying removed property.
* Restored null return for null value fixing failing integration tests.
* Logic has been updated according edge cases
* Logic to copy files from block list items has been added.
* Logic to delete files from block list items on content deletion has been added
* Test fix.
* Refactoring.
* WIP: Resolved breaking changes, minor refactoring.
* Consistently return null over empty, resolving failure in integration test.
* Removed unnecessary code nesting.
* Handle distinct paths.
* Handles clean up of files added via file upload in rich text blocks on delete of the content.
* Update src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs
Co-authored-by: Sven Geusens <geusens@gmail.com>
* Fixed build of integration tests project.
* Handled delete of file uploads when deleting a block from an RTE using a file upload property.
* Refactored ensure of property type property populated on rich text values to a common helper extension method.
* Fixed integration tests build.
* Handle create of new file from file upload block in an RTE when the document is copied.
* Fixed failing integration tests.
* Refactored notification handlers relating to file uploads into separate classes.
* Handle nested rich text editor block with file upload when copying content.
* Handle nested rich text editor block with file upload when deleting content.
* Minor refactor.
* Integration test compatibility supressions.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Sven Geusens <geusens@gmail.com>
* Fix check for pending package migration to use the package not plan name.
* Cover all package name/identifier permutations and fix the API output for multiple plans
* Adjusted log message to not refer to unattended migrations as migrations may be being run attended.
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* feat: adds new localization keys for forbidden routes
* feat: ignore all 400, 401, 403, and 404 errors as they are handled by the UI
* feat: adds new elements to show forbidden routes and entities
* feat: adds generic forbidden state to base entities
* feat: injects a forbidden route component to documents
* feat: adds 'forbidden' state to media workspace
* chore: aligns document and media workspaces
* test(mock): adds user configuration endpoint
* test(mock): adds calculate-start-nodes endpoint to users
* test(mock): adds missing endpoint for 'client-credentials'
* feat: clean up old observers on entity errors
* feat: aligns UI for better DX if there is no user
* fix: returns early if there is no user, instead of trying to append properties to the object
* feat: adds 'forbidden' state to members
* feat: adds support for forbidden document blueprints
* feat: allows parent to be undefined as well as null
* feat: forbidden route for members as a state
* chore: simplify language workspace
* test: adds forbidden mock data
* test: adds missing endpoints and a check for forbidden ids
2025-06-30 10:00:11 +01:00
Jacob OvergaardGitHubCopilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* Assert dates in content editing integration tests to millisecond only.
* Add date time extension unit tests and refactor to switch statement.
* Removed whitespace.
* add slot for icon
* expose icon data
* render icon
* load type for scaffold
* rename
* render icon for media
* add observable for content type icon
* request data in data source
* wire up document scaffolding
* remove unused
* export server data source
* render icon for member
* rename data source to align with other detail sources
* rename data source
* remove unused styling
* remove console log
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* remove console log
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* remove console log
* render workspace icon for document type folders
* make folder workspace editor
* use element
* remove const
* use folder-workspace-editor for templating folders
* introduce name write guard manager
* prevent name change of file system folders
* Update script-folder-workspace-editor.element.ts
* make guard optional
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Adds optional parameter to Tiptap toolbar item's `isActive`
* Adds `isActive` support to toolbar menus and cascading menus
* Adds `isActive` support to the font menus
* Adds `isActive` support to the table menu
+ UI/CSS tweak
* Adds `isActive` support to the style menu API
+ refactored the commands
* Improves cascading menu popover closing
it previously didn't close the menu when an action was clicked.
* remove trash notifications
* Updated tests so we no longer use the notification for moving to recycle bin
---------
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
* Rename `IContentService.CreateContentFromBlueprint` to `CreateBlueprintFromContent`
In reality, this method is used by the core to create a blueprint from content, and not the other way around, which doesn't need new ids. This was causing confusion, so the old name has been marked as deprecated in favor of the new name. If developers want to create content from blueprints they should use `IContentBlueprintEditingService.GetScaffoldedAsync()` instead, which is what is used by the management api.
* Added integration tests to verify that new block ids are generated when creating content from a blueprint
* Return copy of the blueprint in `ContentBlueprintEditingService.GetScaffoldedAsync` instead of the blueprint itself
* Update CreateContentFromBlueprint xml docs to mention both replacement methods
* Fix tests for rich text blocks
* Small re-organization
* Adjusted tests that were still referencing `ContentService.CreateContentFromBlueprint`
* Add default implementation to new CreateBlueprintFromContent method
* Update tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentBlueprintEditingServiceTests.GetScaffold.cs
Co-authored-by: Andy Butland <abutland73@gmail.com>
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* fix: if no workspace views are found at all, show a not found page
* fix: rather than redirecting to the first available tab, which may not always be available on secondary routing, let the router display the first tab on an empty url
this mirrors how workspace views are displayed in umb-workspace-editor
* Refactored breadcrumb variant name
The parentheses will be added to unnamed variant ancestor items.
* Adds `last-item` attribute
(for semantics)
* Imports tidy-up
* Refactored `#getHref` to early exit for `.isFolder`
Saves on the string allocation.
* Added tests for webhook
* Added tests for webhook trigger
* Bumped version
* Make all Webhook tests run in the pipeline
* Fixed comment
* Reverted npm command
* Updated due to test helper changes
* Updated user group tests due to api helper changes
* Updated tests for user group default configuration due to UI changes
* Added tests for document property value permission
* Added tests for document property value permission in content with block
* Bumped version
* Make specific tests run in the pipeline
* Added skip tag and issue link for the failing tests
* Added tests for granular property value permission
* Fixed comment
* Bumped version
* Bumped version
* Fixed comments
* Bumped version and reverted npm command
* Make all tests for user group permission run in the pipeline
* Updated smokeTest command
* Fixed comments
* Reverted npm command
* feat: fix a small-ish nitpick where extensions would reload after login
this could potentially try to re-register all private extensions after each auth signal, which is being prevented anyway because of duplicate aliases, but still nice to remove and not have to listen to
* feat: align login UI extension load with backoffice, i.e. wait for external load before registering core extensions
* build(deps): bump @hey-api to newest and re-generate client
* chore: adds extra error logging
* feat: adds retry logic to the api interceptor
* feat: warn about incomplete actions
* fix: the body was already plain text, but we need to ensure the headers say so as well
* feat: warns the user when actions could not be completed
* build(deps): update @hey-api/client-fetch
* chore: generate new api
* feat: simplify error handling to just UmbApiError and UmbCancelError
* feat: moves error notifications from interceptors into tryExecute, so you more easily can opt out of it and everything is gathered in one place
* feat: recreate responses with correct 'status' and 'statusText'
* build: stop dotnet processes after debug session
* feat: extrapolate common logic into helper method to create responses
* feat: returns a UmbProblemDetails like object on interceptors to be handled by tryExecute
* chore: deprecates duplicate, outdated UmbProblemDetails interface and type guard
* feat: uses the 'title' of the problem details object to convey the main message
* chore: 401 and 403 uses their own interceptors
* feat: show no notification if 401
* feat: uses the real request method and url (instead of the template placeholders) to tell the user what did not succeed
* feat: retry requests with no timeout/race
* feat: throttle and delay signals and disallow them from being updated from the outside
* chore: adds more logging to timeouts
* chore: optimise imports
* test: ignores any test files left in node_modules folder
* feat: uses auditTime to wait a bit before showing the timeout screen
* feat: adds 404 handling to error interceptor
* chore: cleans up after response modification
* feat: preserve only a few headers
this mimicks the v15 behavior
* feat: lets the UI handle 404 errors instead of notifying directly
* test: uses create action menu option instead to find the correct locator, and skips a seemingly unnecessary timeout
* fix: add a catcher to most `asPromise` for stores to prevent cascading errors
* fix: remove conditional instances - they should be able to be undefined
* fix: check for missing store and extract UmbProblemDetails
* fix: only append data if no error
* fix: adds error handling to missing stores and to extract the ProblemDetails object
* revert commit
* fix: ignore errors completely instead of unsetting stores
* revert commit
* chore: cleanup imports
* fix: do not unset store
* stop observation in a proper way
* stop observation of for document-user-permissions
* check for manager twice
* save action
* save action optional
* fix: ensure the right types are used for base stores
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Regenerate keys in RTE blocks on clone operations
This was already present for BlockList and BlockGrid, but not Blocks in RTE.
* Small adjustment from code review
* Bump version to 16.0.0, update starter kit reference and enable package validation.
* Update version number in package.json.
* Re-disabled package validation (can't enable this yet).
* Tiptap style menu toggles (for classes and IDs)
Fixes#19244
* Tiptap style menu toggles (for font/color)
Fixes#19508
* Tiptap "Clear Formatting" remove classes and styles
* Tiptap font sizes, removes trailing semicolon
as the API handles the delimiter
* Tiptap global attrs: adds set/unset styles commands
* Ensure to delete related tokens when removing logins for removed external login providers.
Ensure to avoid removing logins for members.
* Removed unnecessary <= check.
* Updated block grid tests
* Updated notifications in tests
* Updated tests
* Added testIdAttribute
* Bumped version of testHelpers
* Added waits after creation
* Updated more tests related to notifications
* Bumped version
* Cleaned up
* updated tests
* Bumped version
* Updated tests
* bumped version
* chore: export useful rxjs functions
* fix: use switchMap to ensure correct loading of localization extensions
also added filter() and distinctUntilChanged() to ensure the logic is not run more often than what is needed
* test: adds tests for async localization extensions and weights
* chore: apply simpler sorting syntax
* chore: adds catchError to ensure the whole stream is not stopped because of an error
* chore: lowest weight should win
* chore: move catchError so it catches everything
* chore: returns an observable to not break the stream
* chore: reverse weight as the previous was correct
* chore: adds a true comparer function that is more efficient
* Import order sorting
* Export order sorting
---------
Co-authored-by: leekelleher <leekelleher@gmail.com>
* Fixes search filter text alignment
* Let `styleMenu` kind display as a menu
* Collapse excessive whitespace in RTE
* Ensures the RTE Capabilities are in 3 columns
* Dimensions UI fixes
* Ensures backwards compatibility of `UMB_CONTENT_PROPERTY_CONTEXT`
* Updates usage of deprecated `UMB_CONTENT_PROPERTY_CONTEXT` to `UMB_PROPERTY_TYPE_BASED_PROPERTY_CONTEXT`
* chore: disable notifications for global manifest loads
* fix: registers required contexts to load public manifests
* fix: specifically for localizations, load with the same cultures and weights as the backoffice itself does
* fix: set weight to +100 to make sure custom localization extensions are loaded first
* fix: remove 'welcome' fallback to avoid a flash of unlocalized content (FO"U"C)
* fix: starting <li> tag
* v16 cherry pick of member partial cache invalidator see #19314
# Resolved merge conflic in src/Umbraco.Core/Cache/Refreshers/Implement/MemberCacheRefresher.cs
* Take nullmember cacheitems into account
* Removed encoding of request to retrieve files and folders by path, to avoid double encoding via the typed client.
* fix: adjusts log viewer to encode only once and remove empty properties
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
* Updated due to test helper changes
* Updated user group tests due to api helper changes
* Updated tests for user group default configuration due to UI changes
* Added tests for document property value permission
* Added tests for document property value permission in content with block
* Bumped version
* Make specific tests run in the pipeline
* Added skip tag and issue link for the failing tests
* Fixed comment
* Bumped version
* Fixed comments
* Bumped version and reverted npm command
Fixes#19382 by using proper umb-input-date events
The log viewer date range input was changed from using `input` to `umb-input-date`, but the event handlers weren't updated accordingly.
Fixes#19382 by using proper umb-input-date events
The log viewer date range input was changed from using `input` to `umb-input-date`, but the event handlers weren't updated accordingly.
* Ensure tag operations are case insensitve on insert across database types.
* Ensure tags provided in a single property are case insensitively distinct when saving the tags and relationships.
* Update src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Handle case sensitivity on insert with tag groups too.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: add a catcher to most `asPromise` for stores to prevent cascading errors
* fix: remove conditional instances - they should be able to be undefined
* fix: check for missing store and extract UmbProblemDetails
* fix: only append data if no error
* fix: adds error handling to missing stores and to extract the ProblemDetails object
* revert commit
* fix: ignore errors completely instead of unsetting stores
* revert commit
* chore: cleanup imports
* fix: do not unset store
* stop observation in a proper way
* stop observation of for document-user-permissions
* check for manager twice
* save action
* save action optional
* simplify init for detail repostiory
* fix routes
* adjusting more not found routes
* fix structure manager clean up
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Thow if attempting to use the default unique media path scheme with version 7 GUIDs.
* Expanded unittests, fixed null params, chose a better exception
* Use parameters in test.
---------
Co-authored-by: Migaroez <geusens@gmail.com>
* Added translations for `pt-PT` based on the existing `en` file
* Removed translations from `pt-BR` that are the same in `pt` or not translated. Other small adjustments.
* Replace all `ligação` with `link`, as it is more commonly used
* Small typo fixes in pt-BR
* Do not set icon color if the item is selected
* Added helper method for icon version to render.
* Fixed naming of protected helper method.
* Move further logic into helper method.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
The MediaService currently locks the ContentTree for GetPagedOfType(s) operations, but it's querying the MediaTree. This ensures we lock the correct tree.
* correct for fewer rejected promises
* move set new is new
* enable router slot to back out of a redirect
* hacky fix for redirect controller
* Update src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-is-new-redirect.controller.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: renames `./src` to `./dist-cms` in distributed package.json
* build: adds missing package.json to segment package
* build: adds missing package and vite.config for 'settings'
* build: adds missing package.json for 'translation'
* build: hoist all sub-dependencies to main package.json file
* build: sync lock file with workspaces
* build: join the paths (for os agnosticity)
* implement use of pathMatch: 'full' for empty redirects
* awaitStability feature for route redirects
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
* introduce umb-content-workspace-property to improve dx
* make property responsible for observing the view guard
* Update src/Umbraco.Web.UI.Client/src/packages/content/content/global-components/content-workspace-property.element.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* context consumer update tests
* no need to import when exporting
* only observe aliases
* merge the two component for less complexity
* added property settings
* ensure this works with extension begin removed
---------
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Removes unnecessary newlines from rich text as JSON delivery API output.
* Fix case from PR feedback.
# Conflicts:
# src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs
# tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/RichTextParserTests.cs
* fix: add appcache null check
* Moved constant into standard location.
Removed now unnecessary comment.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
Handle user id 0 (Unknown/System) when building content version response model
`IUserIdKeyResolver.GetAsync` throws an exception when a user is not found.
As user 0 does not really exist, the exception was being thrown.
We now handle this scenario to return an empty reference.
* add slot for icon
* expose icon data
* render icon
* load type for scaffold
* rename
* render icon for media
* add observable for content type icon
* request data in data source
* wire up document scaffolding
* remove unused
* export server data source
* render icon for member
* rename data source to align with other detail sources
* rename data source
* remove unused styling
* remove console log
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* remove console log
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* remove console log
* Update detail-repository-base.ts
* Update document-workspace-split-view.element.ts
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix for invalid state in JsonBlockValueConverter when an unused layout has a nested array
* Improved comments as suggested by copilot review, also fixed code style miss
* Added check for malformed JSON with more closing array tokens then opening tokens
* Added culture parameter to search APIs and propagated it to the indexed entity search service
* Variant Culture aware search in Document and Media Pickers (#19336)
* generate types
* enable selection of entity-item-ref elements
* Update input-document.element.ts
* add culture to document search args
* pass culture param to search end point
* get variant context in document picker
* add variant context
* set culture in variant context when changing app language
* set variant context when swithing variant in a workspace
* Update content-detail-workspace-base.ts
* clean up
* remove from split view manager
* Update property-dataset-base-context.ts
* change name to fallbackCulture
* simplify
* get context instead of consuming
* make all methods async
* implement for media
* Update current-user-action.extension.ts
* allow null until we reach the server
* remove log
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* remove console.log
* add display culture
* opt-in inheritance
* set observe alias to observeAppCulture
* stop inheritance if specific cultures are set
* remove unused import
* include culture for document and media global search
* await value for get methods
* include orderCulture for document collections
* Update document-collection.context.ts
* Update document-collection.context.ts
* fix self import
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
* fix: split attribute regex into two to be able to ignore the order of attributes
* the regex should not care for the ending of the tag
* test: adds test cases to test order of attributes
* remove image sources using new regex
* adds more documentation
* adds test cases to test removal of source with and without parameters
* test for null value
* test: adds more cases for null and reversed parameters
* remove padding
* add document urls data resolver
* use in url info app
* handle invariant cases
* do not render culture if all links have the same culture
* use if defined
* handle variant with no links
* Update types.ts
* fix lint errors
* get variant aware document data
* remove unused
* use media item repository
* temp remove check
* populate url
* add spacing to reference app
* reset the url when removing document or media
* add validator
* make url input required
---------
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>
* Cherry-pick from 13 and adjust.
* Resolve circular dependency references and clear OpenIddict tokens on purging sessions associated with removed login providers.
* Removed out of date comment.
* Removed incorrect casing update for SQLite.
* Added logging and try/catch around retrieval of references, so we don't block critical operations following an incompatible data type change.
* Added a little more detail to the log message.
* Added a little more detail to the log message.
* Fix unittest mock dependency
---------
Co-authored-by: Migaroez <geusens@gmail.com>
* add global search extension
* render global search extension in search modal
* register document global search
* add media global search
* add data type global search
* add dictionary global search
* import manifests
* register document type global search
* add media type global search
* register member global search
* register member type global search
* register template global search
* export missing consts
* export missing consts
* export missing consts
* add conditions
* add variant context
* set culture in variant context when changing app language
* set variant context when swithing variant in a workspace
* Update content-detail-workspace-base.ts
* clean up
* remove from split view manager
* Update property-dataset-base-context.ts
* change name to fallbackCulture
* simplify
* make all methods async
* Update current-user-action.extension.ts
* remove culture and segment state
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Ordered `@property` setters/getters
* JSDocs + comments
* Removed unneeded CSS
* Markup code formatting
* Hides "Reset focal point" button
when focal point has default value
* Image Cropper field element: adds active state to crops
* Image Cropper Editor Field element: reduced the markup and styles
Removing duplications from inherited class
* Removed unused code from Image Cropper Focus Setter element
* Big refactor of Image Cropper Editor modal
to support File Upload Previews
* Added `<umb-file-upload-preview>`
to handle the logic of rendering the relevant `fileUploadPreview` extension.
* Refactored SVG File Upload Preview component
Removes the `<uui-card-media>` container.
Controversially removes the link, but this was inconsistent with other file previews.
* Refactored General File Upload Preview component
Removes the `<uui-card-media>` container.
Controversially removes the link, but this was inconsistent with other file previews.
* Refactored Image File Upload Preview component
Removes the `<uui-card-media>` container.
Controversially removes the link, but this was inconsistent with other file previews.
* Refactored Audio and Video File Upload Preview component
To align code with the other file previews.
* Update src/Umbraco.Web.UI.Client/src/packages/media/media/modals/image-cropper-editor/image-cropper-editor-modal.element.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
* Tiptap Media Picker: Uses imaging repository
to get the resized URLs from the server.
This adds support for ImageSharp's HMAC security.
* Update src/Umbraco.Web.UI.Client/src/packages/tiptap/extensions/toolbar/media-picker.tiptap-toolbar-api.ts
* feat: uses the actual configured image SIZE for both width and height as documented
this also deprecates the public maxWidth property
* feat: verifies that a resized image exists and use the size of that
* feat: transfer the image size calculation to the drag'n'drop uploader and ensures that imageSize() accounts for maxHeight as well
* docs: adds comment to explain why it calculates the image size
* test: adds cases for imageSize
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
* Updated nightly E2E pipeline
* Fixed failing E2E tests
* Skipped content tests wirh list view content due to an issue
* Updated tests due to UI changes
* Bumped version
* Added more waits
* add method to get all property aliases
* pass property aliases to composition modal
* put in a box + adjust spacing
* disable if doc type is not compatible for composing
* compare with what is used for composition
* add comment
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Ensures cultures set on content are correctly cased and verifies with integration tests.
* Improved test comments.
* Move culture casing check into an extension method and use from content service.
* Deduplicated test code and added more test cases
* Only run invalid culture codes test on Windows
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* make sure the unique follows the unique of the models type
* make sure the uniques are used to clean up
* omit #containers state for a more direct data flow
* ensure containers are refreshed correctly
* set ownerContentTypeUnique to undefined when clear
* Allow segment access to editors with access to documents, not only settings.
* Update src/Umbraco.Cms.Api.Management/Controllers/Segment/SegmentControllerBase.cs
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* Cleaned up usings
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* Deprecate the AuditService.Write() method
It will be moved to a new service with the rework of the AuditService, as it relates to a different repository (umbracoLog vs umbracoAudit).
* Update obsolete message to reference V18
* Apply suggestions from code review
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* remove curves
* new photo
* Revert "remove curves"
This reverts commit f691d1762f.
* re-introduce curves
* fix the edge of the lines
* fix edge of lines
* use color-background for alignment with login screen
* chore: replace login image in mocks
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
* add new manifest
* wip element
* add segment to preview context
* add segment icon
* open preview route on the same server
* Update preview.context.ts
* clean up
* pass culture and segment to preview window
* Incorrect forum and security urls when raising issue (#19080)
* Add 'ManifestWithDynamicConditions' to ManifestHeaderApp so Header Apps can be conditionally shown/loaded (#19124)
* V15 QA Added acceptance tests for bulk trash dialog (#19125)
* Added tests for bulk trash content dialog
* Updated tests for trash content dialog
* Added tests for trash and bulk trash media dialog
* Moved trash content tests into a folder
* Bumped version
* Make trash tests run in the pipeline
* Make trash tests run in the pipeline
* Fixed comments
* Reverted npm command
* readme shield for forum
* Allow deselection of color picker property. (#19174)
* V15 Added acceptance tests for tiptap statusbar (#19131)
* Updated tests for tiptap RTE
* Moved tests for titptap toolbar to another class
* Added tests for titptap toolbar
* Added tests for tiptap statusbar
* Bumped version
* Make tiptap tests run in the pipeline
* Bumped version
* Reverted npm command
* build: restores some of the behavior from V13 in relation to StaticAssets (#19189)
In v13, the StaticAssets build was only triggered based on the existence of either the output folder or a preserve.* marker file. Here, we also additionally check for the node_modules/.package-lock.json file before reinstalling npm dependencies. We also now only run `npm install` rather than `npm ci` to optimise the build.
* filter search to only include element types
* V16 QA update failing nightly tests (#19190)
* Fixed tests
* More updates for tests
* Bumped version of testhelpers
* Fixed notifications in tests
* Last fixes
* Revert "Merge branch 'v16/dev' into v16/hotfix/filter-element-type-search-for-block-types"
This reverts commit 7b8b5c28da, reversing
changes made to 6d4ddb7077.
* disable not pickable search results
* correct use of pickable filter
---------
Co-authored-by: Lotte Pitcher <LottePitcher@users.noreply.github.com>
Co-authored-by: Warren Buckley <warren@hackmakedo.com>
Co-authored-by: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Lotte Pitcher <github@lottepitcher.co.uk>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
Co-authored-by: mole <nikolajlauridsen@protonmail.ch>
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Updates dependencies on Umbraco.Code and Microsoft.CodeAnalysis.*.
* Avoids dependency warnings on build of Web.UI project.
* Bumped version to 16.0-rc2.
* build(deps): bump tiptap from 2.11.5 to 2.11.7
* fix: prepends the system `/css` folder to stylesheets before attempting to load them
* fix: adds more safety around path assumptions
* chore: eslint fix
* fix: prepend only the system path to picked stylesheets
* Open entity actions menu as pop up instead of modal
* Update entity-actions-bundle.element.ts
* Update entity-actions-bundle.element.ts
* ensure no indent for the menu items of the entity actions menu
* add scroll container
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
In v13, the StaticAssets build was only triggered based on the existence of either the output folder or a preserve.* marker file. Here, we also additionally check for the node_modules/.package-lock.json file before reinstalling npm dependencies. We also now only run `npm install` rather than `npm ci` to optimise the build.
In v13, the StaticAssets build was only triggered based on the existence of either the output folder or a preserve.* marker file. Here, we also additionally check for the node_modules/.package-lock.json file before reinstalling npm dependencies. We also now only run `npm install` rather than `npm ci` to optimise the build.
In v13, the StaticAssets build was only triggered based on the existence of either the output folder or a preserve.* marker file. Here, we also additionally check for the node_modules/.package-lock.json file before reinstalling npm dependencies. We also now only run `npm install` rather than `npm ci` to optimise the build.
* Updated tests for tiptap RTE
* Moved tests for titptap toolbar to another class
* Added tests for titptap toolbar
* Added tests for tiptap statusbar
* Bumped version
* Make tiptap tests run in the pipeline
* Bumped version
* Reverted npm command
* Add authorization for webhooks to item and log endpoints.
* Remove full path details from exception when requesting a path outside of the physical file system's root.
* Added missing usings.
* Revert changes to the webhook items API
---------
Co-authored-by: kjac <kja@umbraco.dk>
* fix: detects if a request contains a problemdetails object then maps that back to the UmbApiError
* feat: uses isProblemDetailsLike everywhere and avoids showing the user a big "detail" string
* feat: disables notifications for temp file upload to handle it manually in case of special server errors
* fix: use temporary file manager for dictionary to catch all errors
* fix: uses temporary file manager to upload avatars to handle all server errors
* feat: observe on allowed image types for user avatar
* Update src/Umbraco.Web.UI.Client/src/packages/core/temporary-file/temporary-file-manager.class.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* feat: located the status code 413 directly now that the management api supports it out-of-the-box
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Add authorization for webhooks to item and log endpoints.
* Remove full path details from exception when requesting a path outside of the physical file system's root.
* Added missing usings.
* Revert changes to the webhook items API
---------
Co-authored-by: kjac <kja@umbraco.dk>
* fix: the publish action should use the publish modal
* feat: allows the publish modal to handle invariant data
* chore: rearrange the unpublish action & modal so they are one-for-one alike with publishing
* Updated acceptance tests - add steps to interact with publish modal
* Added tests for publish variant content
* Bumped version of test helper
* handle segment
* include segments in success notification
* include segments in success message
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Nhu Dinh <hnd@umbraco.dk>
* fix: the publish action should use the publish modal
* feat: allows the publish modal to handle invariant data
* chore: rearrange the unpublish action & modal so they are one-for-one alike with publishing
* Updated acceptance tests - add steps to interact with publish modal
* Added tests for publish variant content
* Bumped version of test helper
* feat: adds text to indicate you are about to publish
---------
Co-authored-by: Nhu Dinh <hnd@umbraco.dk>
* Added tests for bulk trash content dialog
* Updated tests for trash content dialog
* Added tests for trash and bulk trash media dialog
* Moved trash content tests into a folder
* Bumped version
* Make trash tests run in the pipeline
* Make trash tests run in the pipeline
* Fixed comments
* Reverted npm command
* prevent document type picker search from returning element types when not allowed
* rename + fix modal rejection
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Filter Available should not return items without published ancestors when not in preview
* Update unittests mocks
* Internal documentation and minor code tidy.
* Tidied up integration tests and added new tests for the added method.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Fixed error with reflection on integration test configure builder attributes, so integration tests can be created outside of the Umbraco integration test project.
* Fix nullability
---------
Co-authored-by: mole <nikolajlauridsen@protonmail.ch>
* Clear elementscache from cache refreshers
* Add very simple test ensuring the elements cache is cleared
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* Fixed error with reflection on integration test configure builder attributes, so integration tests can be created outside of the Umbraco integration test project.
* Fix nullability
---------
Co-authored-by: mole <nikolajlauridsen@protonmail.ch>
* Clear elementscache from cache refreshers
* Add very simple test ensuring the elements cache is cleared
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* feat: removes all generic Created, Saved, and Deleted notifications
* Comment out the notification checks in acceptance tests
* Bumped version of test helper
* Fixed publish with descendants tests
* Cleaned up
* Bumped version of test helper
---------
Co-authored-by: Nhu Dinh <hnd@umbraco.dk>
Co-authored-by: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>
* feat: adds new texts for 'unpublished' action
* chore(mock): adds missing endpoints for mock data
* feat: removes old, deprecated, and hardcoded messages for unpublish
* fix: publish actions should not fail just because the notification context might not be available
* feat: the unpublish actions should mimick the publish actions
* chore(mock): adds mock endpoints for 'publish with descendants'
* feat: moves 'publish with descendants' notifications to calling workspace
* feat: adds DK translations
* feat: adds different notification for unpublishing invariant content
* removes `server-api-dev` script that acts weird with base urls after upgrade of client-fetch
* build(deps): updates client-fetch and uuid dependencies
* make consume return undefined
* make consume return undefined
* a few more undefined context handlings
* unprovide context
* rename
* jsdocs
* refactor UmbContextBase to not use generic types
* reset target on disconnect
* posible undefined context
* callback with undefined when disconnected
* update comment
* correct types
* correct error handling
* do not throw an error when missing
* always return permitted to onChange callback
* fix not existing store
* fix resetting structure manager
* fix requestAuditLogs
* support gone context
* support context not begin present
* use UMB_ENTITY_WORKSPACE_CONTEXT for right typing
* correct type to use UMB_SUBMITTABLE_WORKSPACE_CONTEXT
* correct context consumption
* fix tests
* fix tests
* catch modal registration that has been destroyed
* catch
* handle context unprovide
* more clean up
* fix context consumption
* Update repository-details.manager.ts
* enable store to be undefined
* enable UmbRelationTypeDetailRepository store to be undefined
* remove log
---------
Co-authored-by: Mads Rasmussen <madsr@hey.com>
* Updated dependencies to latest versions.
* Fixed breaking changes following dependency updates.
* Limited NUnit updates to within the current major.
* Fixed failing delivery API contract integration test.
* wip sortChildrenOfContent kind
* export types
* add modal token + consts
* Update manifests.ts
* add content tree item model
* wip use umb-table element
* set as prop
* render sort icon
* prevent selection when sortable
* remove unused
* clean up
* reflect sortable prop
* start implementing sortChildrenOfContent
* render name and create date
* handle date ordering
* remove unused
* clean up
* fix grab and grabbing styling for sortable table rows
* render label when no children
* Update sort-children-of-content-modal.element.ts
* fix styling of load more
* only allow sorting when all items are loaded
* Update index.js
* Added integration tests for publishing service with invalid content.
* Amend test to new create/update models
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* content type nesting
* TODOs
* repository detail manager
* todo
* implement unlimited compositions
* a little refactor
* warn
* clear state
* refactor to use unique
* note
* code corrections to match with types
* unique type for Array State
* implement usedForInheritance and editedTypes for Structure Manager and Compositions
* rename method
* Update repository-details.manager.ts
* avoid type casting
* align naming
* do not await
* fix race condition when switching document types fast
* remove test prop
* Update manifests.ts
* UmbMediaTypeWorkspaceContext Routes for inheritance
* import
---------
Co-authored-by: Mads Rasmussen <madsr@hey.com>
* Add GetChecksumStreamAsync and GetLengthAsync
* Obsolete CanSetPhysical, Set and GetVirtualPath
* Updated obsolete messages to reference Umbraco 18
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Removed population of Urls on document response model and obsoleted property.
* Updated readme for acceptance tests to show how to run a single test.
* Removed URLs from document models on the client-side and fixed issue with link picker stil using legacy URLs response data.
---------
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* declare type and constant
* implement for example
* commit example
* fix document data
* make rte blocks optional
* remove blocks from this mock data
* fix mock data for RTE
* comment and destroy method implementation
* set to 8
* update comments
* remove console.log
* host may be undefined
* prevent duplicate messages
* Added configuration for the log file name and format.
* Added unit test for LoggingConfiguration.
* Rely on configuration validation to verify supported log file format arguments.
* Fixed unit test failing on build pipeline.
* Rowrked #18771 with a more brute force solution
* Fixes class name. Adds unit test verifying behaviour.
* Corrected test name.
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Implement tags for content cache
* Implement tags for media cache
* Refactor to only use cache and media tags
* Remove from DI
* Cleanup
* Update Nuget packages
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Change description to be more precise
* Minor code tidy: indents, static methods where possible, made tags methods a little terser.
* Fixed according to review
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Fix
* Editors with access should be able to clear a blocklist value
* Writeup around block element level variation
* Dissallow values to be removed a limited language user does not have permissions to
* Remove commented out code
* improved comments
* Improve expose list for limited language access sub variant block lists
* Fix
* Editors with access should be able to clear a blocklist value
* Writeup around block element level variation
* Dissallow values to be removed a limited language user does not have permissions to
* Remove commented out code
* improved comments
* Improve expose list for limited language access sub variant block lists
* Adds `searchResultItem` for Media
Includes "trashed" state tag
* Removes trailing whitespace from manifest name
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Loosens the guard for an empty `query`
* Adds search to Document Type picker
* Document Type Search Provider: adds support for querying element types
* Adds `pickerSearchResultItem` element for Document Types
* Help menu: fixes Our Umbraco link
* Changes forum link from Our Umbraco
to the new Community Forum website.
* Small fixes in the Log Viewer Message
* Help Menu: flattens structure
for tighter UI.
* Replaced hot-linked favicon images
with built-in icons.
Except for Microsoft Bing.
* Corrected "Search Umbraco Forum using Google" link
* Scaffold content for content templates serverside
* Generated client types and methods from API.
* Retrieve scaffolded blueprint when creating documents from a blueprint.
* Use introduced helper method on existing read.
* Cleaned up imports.
* feat: moves scaffold service logic to data source and make shallow repository method
* feat: follows UmbDataSourceResponse interface and reorders public/private methods
* Bumped version to 15.4.0-r2.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
* Make the entity search service async
* Update src/Umbraco.Core/Services/IIndexedEntitySearchService.cs
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* remove user and document/media circular imports
* fix code order
* change MAX_CIRCULAR_DEPENDENCIES
* remove all comments from content before checking for imports
* fix self import
* fix self imports
* Revert "Ensure dates read from the database are treated as local when constructing entities (#18989)"
This reverts commit 7b10d39d66.
* Avoid system dates stored with local server time being defaulted to UTC on database read.
* ContentScheduleDto.Date is UTC
---------
Co-authored-by: kjac <kja@umbraco.dk>
👍🎉 First off, thanks for taking the time to contribute! 🎉👍
👍🎉 First of all, thanks for taking the time to contribute! 🎉👍
These contribution guidelines are mostly just that - guidelines, not rules. This is what we've found to work best over the years, but if you choose to ignore them, we still love you! 💖 Use your best judgement, and feel free to propose changes to this document in a pull request.
These contribution guidelines are mostly just that - guidelines, not rules. This is what we've found to work best over the years, but if you choose to ignore them, we still love you! 💖 Use your best judgment, and feel free to propose changes to this document in a pull request.
We have a guide on [what to consider before you start](contributing-before-you-start.md) and more detailed guides at the end of this article.
@@ -12,56 +12,56 @@ This guide describes each step to make your first contribution:
1.**Fork**
Create a fork of [`Umbraco-CMS` on GitHub](https://github.com/umbraco/Umbraco-CMS)
Create a fork of [`Umbraco-CMS` on GitHub](https://github.com/umbraco/Umbraco-CMS)


2.**Clone**
When GitHub has created your fork, you can clone it in your favorite Git tool or on the command line with `git clone https://github.com/[YourUsername]/Umbraco-CMS`.
When GitHub has created your fork, you can clone it in your favorite Git tool or on the command line with `git clone https://github.com/[YourUsername]/Umbraco-CMS`.


3.**Switch to the correct branch**
Switch to the `contrib` branch
Switch to the `main` branch
4.**Branch out**
Create a new branch based on `contrib` and name it after the issue you're fixing, For example: `v15/bugfix/18132-rte-tinymce-onchange-value-check`.
Create a new branch based on `main` and name it after the issue you're fixing. For example: `v15/bugfix/18132-rte-tinymce-onchange-value-check`.
Please follow this format for branches: `v{major}/{feature|bugfix|task}/{issue}-{description}`.
Please follow this format for branches: `v{major}/{feature|bugfix|task}/{issue}-{description}`.
This is a development branch for the particular issue you're working on, in this case a bug-fix for issue number `18132` that affects Umbraco v.15.
This is a development branch for the particular issue you're working on, in this case, a bug-fix for issue number `18132` that affects Umbraco v.15.
Don't commit to `contrib`, create a new branch first.
Don't commit to `main`, create a new branch first.
5.**Build or run a Development Server**
You can build or run a Development Server with any IDE that supports DotNet or the command line.
You can build or run a Development Server with any IDE that supports .NET or the command line.
Read [Build or run a Development Server](BUILD.md) for the right approach to your needs.
Read [Build or run a Development Server](BUILD.md) for the right approach to your needs.
6.**Change**
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](contributing-first-issue.md#questions).
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](contributing-first-issue.md#questions).
7.**Commit and push**
Done? Yay! 🎉
Done? Yay! 🎉
Remember to commit to your branch. When it's ready push the changes to your fork on GitHub.
Remember to commit to your branch. When it's ready, push the changes to your fork on GitHub.
8.**Create pull request**
On GitHub, in your forked repository (`https://github.com/[YourUsername]/Umbraco-CMS`) you will see a banner saying that you pushed a new branch and a button to make a pull request. Tap the button and follow the instuctions.
On GitHub, in your forked repository (`https://github.com/[YourUsername]/Umbraco-CMS`), you will see a banner saying that you pushed a new branch and a button to make a pull request. Tap the button and follow the instructions.
Want to read further? [Creating a pull request and what happens next](contributing-creating-a-pr.md).
Would you like to read further? [Creating a pull request and what happens next](contributing-creating-a-pr.md).
## Further contribution guides
- [Before you start](contributing-before-you-start.md)
- [Finding your first issue: Up for grabs](contributing-before-you-start.md)
- [Finding your first issue: Up for grabs](contributing-first-issue.md)
- [Contributing to the new backoffice](https://docs.umbraco.com/umbraco-backoffice/)
# **Contributing to Localization in the Backoffice**
Do you want to help keep our translations accurate and up to standard? 🌍✨
Your input makes a real difference! By reviewing, refining, or suggesting improvements, you ensure that our translations remain clear, consistent, and user-friendly for everyone.
## **How Can I Contribute?**
To contribute to localization in the Backoffice, follow this step-by-step guide:
### **1. Change the Language in Backoffice**
1. Open the Backoffice, click on your profile icon in the top-right corner, and select "Edit."
2. Under "UI Culture," select the language you want to review from the dropdown menu.

### **2. Find a Translation Error**
1. Navigate through the Backoffice and check if everything is translated correctly.
2. When you find a translation error, right-click on it and select "Inspect."
3. Look for the nearest element that starts with `umb-` and has a name indicating something specific to the given location.
**Example:**
* The closest parent element should be specific, such as `umb-document-type-workspace-view-settings` instead of a generic element like `umb-property-layout.`
### **3. Find the Code in VS Code**
1. Open VS Code and search for the nearest `umb-` element you identified.

2. Scroll down to find `render() {` and look for the element label that needs updating.

3. If the label is hardcoded, it must be updated.
**Example:**
`label="Vary by culture"`
### **4. Find the Correct Translation**
1. Open the `en.ts` or `en-us.ts` file and search for relevant keywords. \
\
**Example:**
* If the text is "Vary by culture," search for `vary`, `culture`, or `Vary by culture`.
2. Once you find the translation, take the element name and search for it in the target language file (e.g., `da-dk.ts` for Danish).

3. If a translation exists, insert it into the label element found earlier.
### **5. Insert the Translation**
To display the new translation correctly, insert the following code inside the label element:
`${this.localize.term('action_key')}`
Replace `action_key` with the correct translation key.
Save the changes and return to the Backoffice to see the update.

### **6. Commit and Push**
1. Commit your changes to a new temporary branch (avoid committing directly to `contrib`).
2. Push the changes to your fork on GitHub.
### **7. Create a Pull Request**
1. In your forked repository on GitHub (`https://github.com/[YourUsername]/Umbraco-CMS`), a banner will appear stating that you pushed a new branch.
2. Click the button to create a pull request and follow the instructions.
## **I Can’t Find the Correct Translation**
If you can’t find the translation you need, it may not exist yet. In this case, you can create a new action with related keys.
### **1. Ensure It Doesn’t Already Exist**
Search thoroughly in `en.ts` or `en-us.ts` for all relevant keywords.
### **2. Create an Action**
1. Choose a meaningful name for the action to avoid confusion. \
\
**Example:** Translation for the Data Type "Color Picker."
* **Good name:** `colorPickerConfigurations`
* **Bad name:** `colorpicker`
2. A specific action name prevents unnecessarily long key names.
3. Define the action:
### **3. Create Keys**
1. Use clear and descriptive key names. \
\
**Example:**
* **Good name:** `colorsTitle`
* **Bad name:** `colors`
2. Add the necessary keys inside the action with proper translations.

## **I Can’t Find a <code>render()</code> Code in VS Code**
In some cases, such as Data Types, the label might not be inside `render()`. Instead, it may be in a manifest file.
### 1. Search for the Text
Copy the text from the Backoffice and search for it in the code.
### 2. Open the Manifest File
Once you find the relevant manifest file, open it to confirm you’re in the right place.
### 3. Change the Label
In Markdown files, localization is slightly different. Instead of:
Once all changes are made, your manifest should look something like this:

---
### Thank you
Following these steps ensures that the Umbraco Backoffice remains accessible and user-friendly in all supported languages. Thanks for contributing! 🎉
<!-- OpenIddict.AspNetCore, Npoco.SqlServer and Microsoft.EntityFrameworkCore.SqlServer brings in a vulnerable version of Microsoft.IdentityModel.JsonWebTokens -->
<!-- Take top-level depedendency on Microsoft.IdentityModel.JsonWebTokens, because OpenIddict.AspNetCore, Npoco.SqlServer and Microsoft.EntityFrameworkCore.SqlServer depends on a vulnerable version -->
<!-- Azure.Identity, Microsoft.EntityFrameworkCore.SqlServer and Dazinator.Extensions.FileProviders brings in a legacy version of System.Text.Encodings.Web -->
while (($status -ne 'running') -and ($attempt -lt $maxAttempts)) {
Start-Sleep -Seconds 5
# We use the docker inspect command to check the status of the container. If the container is not running, we wait 5 seconds and try again. And if reaches 12 attempts, we fail the build.
=>$"{domainAndUri.ContentId}{DomainUtilities.PathRelativeToDomain(domainAndUri.Uri, contentRoute.LocalPath)}";// Use LocalPath over AbsolutePath to keep the path decoded.
"description":"This shows all APIs available in this version of Umbraco - including all the legacy apis that are available for backward compatibility",
"The configured external login providers have changed. Existing backoffice sessions using the removed providers will be invalidated and external login data removed.");
/// Custom JSON converter registered via <see cref="ConfigureUmbracoBackofficeJsonOptions"/> to serialize <see cref="ValidationProblemDetails" /> to JSON.
[Obsolete("This property is no longer populated. Please use /document/{id}/urls instead to retrieve the URLs for a document. Scheduled for removal in Umbraco 17.")]
[Obsolete("This property is no longer populated. Please use /media/{id}/urls instead to retrieve the URLs for a document. Scheduled for removal in Umbraco 17.")]
<MessageText="Skip BuildBackoffice target because UmbracoBuild is '$(UmbracoBuild)' (this is not Visual Studio)"Importance="high"Condition="'$(UmbracoBuild)' != ''"/>
<MessageText="Skip BuildBackoffice target because '$(BackofficeAssetsPath)' already exists"Importance="high"Condition="Exists('$(BackofficeAssetsPath)')"/>
<MessageText="Call BuildBackoffice target because UmbracoBuild is empty (this is Visual Studio) and '$(BackofficeAssetsPath)' doesn't exist"Importance="high"Condition="'$(UmbracoBuild)' == '' and !Exists('$(BackofficeAssetsPath)')"/>
<CallTargetTargets="BuildBackoffice"Condition="'$(UmbracoBuild)' == '' and !Exists('$(BackofficeAssetsPath)')"/>
<MessageText="Skip CleanBackoffice target because '$(BackofficeAssetsPath)' doesn't exist"Importance="high"Condition="!Exists('$(BackofficeAssetsPath)')"/>
<MessageText="Skip CleanBackoffice target because preserve.backoffice marker file exists"Importance="high"Condition="Exists('$(BackofficeAssetsPath)') and Exists('$(SolutionDir)preserve.backoffice')"/>
<MessageText="Call CleanBackoffice target because '$(BackofficeAssetsPath)' exists and preserve.backoffice marker file doesn't exist"Importance="high"Condition="Exists('$(BackofficeAssetsPath)') and !Exists('$(SolutionDir)preserve.backoffice')"/>
<CallTargetTargets="CleanBackoffice"Condition="Exists('$(BackofficeAssetsPath)') and !Exists('$(SolutionDir)preserve.backoffice')"/>
<MessageText="Skip BuildLogin target because UmbracoBuild is '$(UmbracoBuild)' (this is not Visual Studio)"Importance="high"Condition="'$(UmbracoBuild)' != ''"/>
<MessageText="Skip BuildLogin target because '$(LoginAssetsPath)' already exists"Importance="high"Condition="Exists('$(LoginAssetsPath)')"/>
<MessageText="Call BuildLogin target because UmbracoBuild is empty (this is Visual Studio) and '$(LoginAssetsPath)' doesn't exist"Importance="high"Condition="'$(UmbracoBuild)' == '' and !Exists('$(LoginAssetsPath)')"/>
<CallTargetTargets="BuildLogin"Condition="'$(UmbracoBuild)' == '' and !Exists('$(LoginAssetsPath)')"/>
<MessageText="Skip CleanLogin target because '$(LoginAssetsPath)' doesn't exist"Importance="high"Condition="!Exists('$(LoginAssetsPath)')"/>
<MessageText="Skip CleanLogin target because preserve.login marker file exists"Importance="high"Condition="Exists('$(LoginAssetsPath)') and Exists('$(SolutionDir)preserve.login')"/>
<MessageText="Call CleanLogin target because '$(LoginAssetsPath)' exists and preserve.login marker file doesn't exist"Importance="high"Condition="Exists('$(LoginAssetsPath)') and !Exists('$(SolutionDir)preserve.login')"/>
<CallTargetTargets="CleanLogin"Condition="Exists('$(LoginAssetsPath)') and !Exists('$(SolutionDir)preserve.login')"/>
// Ideally, we'd like to not have to clear the entire cache here. However, this was the existing behavior in NuCache.
// The reason for this is that we have no way to know which elements are affected by the changes or what their keys are.
// This is because currently published elements live exclusively in a JSON blob in the umbracoPropertyData table.
// This means that the only way to resolve these keys is to actually parse this data with a specific value converter, and for all cultures, which is not possible.
// If published elements become their own entities with relations, instead of just property data, we can revisit this.
// Ideally, we'd like to not have to clear the entire cache here. However, this was the existing behavior in NuCache.
// The reason for this is that we have no way to know which elements are affected by the changes or what their keys are.
// This is because currently published elements live exclusively in a JSON blob in the umbracoPropertyData table.
// This means that the only way to resolve these keys is to actually parse this data with a specific value converter, and for all cultures, which is not possible.
// If published elements become their own entities with relations, instead of just property data, we can revisit this.
// This specific cache key was introduced to fix an issue where the member username could not be the same as the member id, because the cache keys collided.
// This is done in a bit of a hacky way, because the cache key is created internally in the repository, but we need to clear it here.
// Ideally, we want to use a shared way of generating the key between this and the repository.
// Additionally, the RepositoryCacheKeys actually caches the string to avoid re-allocating memory; we would like to also use this in the repository
message=$"The file name arguments '{string.Join(",", fileNameFormatArgumentsAsArray)}' contain one or more values that aren't in the supported list of values '{string.Join(",", LoggingConfiguration.SupportedFileNameFormatArguments)}'.";
message=$"The provided file name format '{fileNameFormat}' could not be used with the provided arguments '{string.Join(",", fileNameFormatArgumentsAsArray)}'.";
@@ -7,9 +7,6 @@ public interface IRequestCultureService
/// </summary>
string?GetRequestedCulture();
/// <summary>
/// Updates the current request culture if applicable.
/// </summary>
/// <param name="culture">The culture to use for the current request.</param>
[Obsolete("Use IVariationContextAccessor to manipulate the variation context. Scheduled for removal in V17.")]
voidSetRequestCulture(stringculture);
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.