* Added tests for creating content using document blueprint
* Updated tests due to api helper for document blueprint changes
* Bumped version
* Make all Blueprint tests runs in the pipeline
* Reverted npm command
* Updated tests for adding a thumbnail to a block grid
* Added tests for adding a block thumbnail
* Make tests run in the pipeline
* Reverted npm command
* Add support for programmatic creation of property types providing the data type key (#19720)
* Add support for programmatic creation of property types providing the data type key.
* Add integration tests
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Don't use Lazy
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Populate name for content and media on URL picker if title is left empty.
* Display URL for manually entered URLs.
* Updates from code review.
* Reverted `elementName` constant
* Sorted imports
* Small code tidy-ups
* Added logic to render the `url` as the `name` fallback
In this case, the `detail` is left empty, giving prominence to the `url` value.
* Refactored the get name/url methods
for code consistency.
* Updated `#requestRemoveItem()` to use the item's resolved name
with a fallback to "item".
Also localized the "Remove" button label
---------
Co-authored-by: leekelleher <leekelleher@gmail.com>
* chore: revamps openid package to organise files in a 'src' folder
* feat: adds all externals as npm workspaces with a vite build
* feat: copies the correct uui assets
* feat: copies the backoffice static assets
* feat: creates the correct module for openid
* feat: copies the correct monaco-editor assets
* feat: moves monaco-editor into its package
* feat: moves dependencies to relevant external modules
* feat: gets rid of rollup
* build: uses tiny-glob instead of glob (one less dependency)
* feat: copies all css assets to dist-cms/css first, minifies them, then copies everything over to StaticAssets
* build: removes old static assets from vite static build
* fix: forwards the file extensions to the inner dropzone
* fix: ensures non-mimetype extensions start with a dot (.)
* chore: adds more details on how to set file extensions
* feat: adds a bit of styling to code snippets in UFM
* fix: return if no file in stream
* fix: prevents potential race condition if src changes
* chore: minor code improvement
* Adds variation by the header name Accept-Language to the develivery API output cache policy
* Removed obsolete constructor (not necessary as the class is internal).
* Introduce contants for header names.
* Fix issue forceHideContentEditorInOverlay not available in RTE
* remove href link when enable hide content editor setting:
---------
Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>
* feat: converts tokenResponse into an object state
* feat: adds worker that checks token lifetime
* feat: initialises token worker to check up on tokens
* revert
* chore: defines typings for shared workers
* chore: uses correct assets url for core package
* feat: sets correct values for token check expiration
* feat: adds labels to confirm modal
* feat: separates logic for session monitoring to own controller
* feat: adds a timeout modal to correctly inform the user
* feat: opens the timeout modal (and closes it again) if a timeout occurs
* feat: log out when user clicks log out button
* feat: adds localization
* feat: sets sensible defaults for the web worker to check
* feat: adds more languages
* chore: adds more comments
* chore: removes nodejs types
* Update src/Umbraco.Web.UI.Client/src/packages/core/auth/workers/token-check.worker.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* chore: removes nodejs types
* chore: resolves cyclic imports
* chore: removes circular dependencies from the 'modal' package
* chore: redefine SharedWorkerGlobalScope because of Github Actions CI
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Mock data updates
The `icon` is not part the block-type data.
* Adds `description` to the mock doctype model
* Refactors block catalogue modal
to make the filter/search work with a block-type's name & description.
This removes the need to use the `<umb-block-type-card>` component,
all element-type data is requested upfront.
* Reverted dev/debug change
* Abstracted out the element-type items observation to its own method
* Updated CSS rule
thanks to a Copilot suggestion.
* Adds `markedExtension` extension-type
* Relocates the Component and Filter extension-type interface code files
to under "extensions"
* Moves `UfmPlugin` type to its own referencable file
* Adds UFM support for JS expressions
making use of "@heximal/expressions" library.
* Modified regex pattern to match nested braces
* try/catch for invalid JS expressions
* Capitalizing the JS in `UmbUfmJsMarkedExtensionApi` class name
for consistency and improved readability.
* Abstracted out `ufmjs()` to its own Marked extension file
making it simpler to add unit-tests.
* Fixed up types in UFM context
added JSDocs for public methods
* Adds a generic Least Recently Used (LRU) cache implementation
* Added tests for granular document permission
* Updated tests for Webhook
* Bumped version
* Make all tests for granular permission run in the pipeline
* Added issue link for the failing tests
* Remove .skip
* Removed unnecessary tests
* Updated assertion step for create and delete document for a specific document
* Updated tests for read permission
* Fixed comments
* Pass notification state to cache refreshers.
Pass previous user name into member saved notification state and use when refreshing cache to clear the member by keys based on this.
* Fixed issue raised in code review.
* Fixed casing for state key.
* Added removed parameter to unit tests.
* Fix breaking change.
* Adds `markedExtension` extension-type
* Relocates the Component and Filter extension-type interface code files
to under "extensions"
* Moves `UfmPlugin` type to its own referencable file
* PoC implementation
* Move to controller base
* Implement solution that seems worse, but works better
* Don't require parent key in repository method
* Fix typos
* Add siblings for data type, media type and media
* Add endpoint for template
* Add DocumentType and DocumentBlueprint controllers
* Fix naming
* Fix case if siblings are under root
* Take item ordering into account
not all entities are ordered by sort order
* Add default implementation
* Fix parentkey
* Add tests
* Format optimizations for split view
* Add test covered requirement to description
* Cover positive case and make test case output more readable
* reduce allocations
* Clarify test
---------
Co-authored-by: Migaroez <geusens@gmail.com>
* Fixes issue where content created from blueprint would not persist file upload property values.
* Ensure a copy of a file upload is created when scaffolding content from a blueprint, like we do when copying content.
* Clarified comment.
* Removed unneeded usings.
* Fixed spelling.
* Handle create of blueprint from content to create a new uploaded file.
Handle delete of blueprint to delete uploaded files.
* Added abstraction for aggregation of granular permissions to support custom permissions.
* Refactor to move responsibility for aggregating granular permissions to the respective mappers.
* Added XML header comments for permission mappers.
* Tidied up/removed warnings in UserPresentationFactory interface and implementation.
* Optimized retrieval of documents in DocumentPermissionMapper.
* Fixed method header comment.
* Use entity service rather than content service to retrieve key and path.
* Passes the preview flag to the cache retrieval when resolving the delivery API object for the MNTP property editor.
* Added unit test verifying fix and adjusted mocks for tests to acoomodate.
* Provided preview flag for Razor rendering.
* 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.
* clean up workspace conditions
* only show collection items workspace view when document is created
* do not pass null for collection
* only show media collection view when media is created
* add basic collection example
* add card view example
* update example readme
* Add workspace view example with collection
* wip tree example
* clean up
* Update README.md
* Update README.md
* 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
* build(github): check that the "close" job only runs when the appropriate label is applied
it follows that the "build" job would only have built an environment when the label was applied
* build(github): check that the action is run directly on the repository and not from a fork
this alleviates the problem that the deploymentToken for Azure only exists within the repository
* 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>
👍🎉 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,51 +12,51 @@ 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).
# **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! 🎉
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.10.0" /> <!-- TODO: Update the hard-dependency that Umbraco.Code has on 4.10.0 to allow update of this to latest (4.13.0). -->
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.
#pragmawarningdisableIDE0060// Remove unused parameter - need to keep these until the next major to avoid breaking changes and/or ambiguous constructor errors
/// Mapping required for mapping all the way from viewmodel to database and back.
/// Implements <see cref="IPermissionPresentationMapper" /> for document permissions.
/// </summary>
/// <remarks>
/// This mapping maps all the way from management api to database in one file intentionally, so it is very clear what it takes, if we wanna add permissions to media or other types in the future.
"The configured external login providers have changed. Existing backoffice sessions using the removed providers will be invalidated and external login data removed.");
[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')"/>
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.