Releases: OnTopicCMS/OnTopic-Editor-AspNetCore
v5.2.0
OnTopic Editor 5.2.0 is a very minor update, which doesn't introduce any new public-facing features, but does make a number of performance improvements, such as reducing the amount of mapping that needs to be performed for each topic by relying on the new lightweight PermittedContentType
view model (#50) and supporting the new AttributeDictionary
constructor for view models (#49). In addition, it also includes a number of internal code improvements, such as adoption of new C# 10 capabilities (#52), including global using directives (#53).
For a full list of improvements and code changes, see Pull Request #57.
v5.1.0
OnTopic Editor 5.1.0 is a minor release which introduces the new MetadataList
(#30) and Reflexive
(#44) attributes, which primarily aid in the Ouroboros Configuration. Primarily, however, it is focused on bug fixes, and resolves a number of priority issues, such as the inability to rollback recent versions (#18).
Features
- #30
MetadataListAttribute
as a simplifiedTopicListAttribute
forLookupList
s inMetadata
- #44
ReflexiveAttribute
to allow embedding the currentAttributeDescriptor
within itself
Improvements
- #41 Upgrade to Bootstrap 5.0.0
- #34 Default export options to commonly used settings
- #33 Sort
DisplayGroup
s with "Content" first and "Settings" last - #32
TextAttribute
: LimitMaxLength
to 255 ifIsIndexedAttribute
- #35 Introduce a
DisableDelete
capability for the current topic - #45 Allow reordering (but not moving) of topics, even if
IsProtected
orDisableDelete
- #26 Display
DefaultValue
,InheritedValue
, andImplicitValue
for all attribute types
Bugs
- #48 Versions getting saved even if no attributes have been modified
- #11, #12 Validate
Key
when renamed, then redirect to newKey
- #18
VersionHistory
precision mixmatch - #38
FileList
is never able to locate files - #16
TopicList
only displays up to 100 items - #31
TokenizedTopicList
inheriting topic references - #25
DefaultValue
should be set on postback if value is null - #29 Topic associations (e.g.,
BaseTopic
,RootTopic
) cannot bind if a view model for theContentType
isn't present - #15 Not all topics displayed in
TokenizedTopicList
lookup
For a comprehensive list of bug fixes and improvements, see Pull Request #46.
v5.0.0
OnTopic Editor 5.0.0 is a major release focused primarily on introducing full support for attribute type plugins, as well as new features exposed from OnTopic 5.0.0 such as topic references.
Features
General
- Attribute Type Plugins: Updated attribute types to be truly dynamically imported at runtime; this allows new attribute types to be defined on a per-implementation basis (04a7470).
- Date/Time Attribute Type: The
DateTimeViewComponent
now uses the HTML5date
,time
, ordatetime-local
types, instead of a custom jQuery UI plugin (c73a76c). - Version Time Zone: The version history dropdown list now displays version times using the local time zone, instead of UTC (2f0a1c2).
Warnings
Exposed warnings at the top of the editor for the following scenarios:
- Unresolved Associations: Exposed warning in the unlikely scenario that not all relationships or topic references could be fully loaded, in which case there are limitations to what modifications can be made (6e22974).
- Disabled Topics: Exposed warning if the topic has been disabled, to help provide visibility to this high-impact scenario (02d892c).
- Hidden Topics: Exposed warning if the topic is hidden from the navigation (bdfcb7e, b581915).
- Non-Indexed Topics: Exposed warning if the topic is hidden from search engines (4e17a5e, b581915).
- Danger: Elevated severity of warnings for critical issues to a red "danger" alert (a1f0fca).
NuGet Packages
- Metapackage: Established
OnTopic.Editor.All
metapackage which includes a reference to all of the core packages and implementations (44e7f9e). - SourceLink: Configured
SourceLink
with references to GitHub commits so that packages can be properly debugged by implementers (6e41c37). - IntelliSense: The NuGet packages now include the XML documentation, thus allowing implementers to benefit from IntelliSense annotations in Visual Studio (38ff680).
- Icon: Added icon to NuGet packages to make them easier to recognize, and consistently branded (2503bcc).
- Size: Removed unnecessary resources such as duplicate JavaScript files (a562cd9) and npm configuration (ba09497) from the NuGet package, dramatically reducing its size.
Bug Fixes
- Modal Window Links: Links within the modal windows now relay the
IsModal
query string parameter to ensure that they link to pages that know they are within a modal window. Notably, this applies to links to base topics (47921ae). - Content Layout Shift: Fixed an irritating jog in the page-level navigation—i.e., the tabs at the top of each form—which occurred each time the page loaded (66ec7e1).
Breaking Changes
DefaultConfiguration
: Removed support for the legacy ASP.NET Web Forms style of configuring OnTopic Editor attributes via theDefaultConfiguration
property, including removal of the (deprecated) helper functions onAttributeDescriptorTopicViewModel
, such asGetConfigurationValue()
(ff8f0de).- Web Forms Compatibility: Removed deprecated features, mostly related to backward compatibility of the legacy ASP.NET Web Forms implementation (606b9c0).
- Attributes Package: Reorganized all .NET related attribute type files into a new
OnTopic.Editor.AspNetCore.Attributes
project/package (04a7470); at minimum, this requires replacing theOnTopic.Editor.Models
package with theOnTopic.Editor.AspNetCore.Attributes
package. BaseTopic
: Updated references to account for the rename fromTopic.DerivedTopic
toTopic.BaseTopic
, including updating references to the legacyTopicId
attribute key (360de6c, 776d543).- Removed Deprecated Configuration Attributes: Removed deprecated configuration attributes on the
AttributeDescriptorViewModel
s as well as from their associatedViewComponent
s (606b9c0, 5c4fb28, 63b4ef1). - Editor Topic View Model Lookup Service: The
EditorViewModelLookupService
no longer derives from theTopicViewModelLookupService
and, thus, cannot be used to also lookupOnTopic.ViewModels
, if they're being utilized (9945a94). This can be resolved by using theCompositeTypeLookupService
to combine these into a single service.
Code Improvements
- OnTopic Library: Updated to OnTopic 5.0.0, which includes a number of breaking changes that needed to be accounted for, such as changes in namespaces (926da84, 5010de1).
- OnTopic Data Transfer Library: Updated to OnTopic Data Transfer 2.0.0, which includes support for resolving associations orphaned due to the import order (bdf6a6a), as well as support for the new topic references feature (c74e528, f79e168).
- Naming Convention: Renamed the attribute descriptors from having an
Attribute
suffix to having anAttributeDescriptor
suffix (04a7470) and the view models from having anTopicViewModel
suffix to just theViewModel
suffix. E.g.,TopicListAttributeTopicViewModel
is nowTopicListAttributeDescriptorViewModel
. This requires updating the name of the corresponding content types in the OnTopic database. The OnTopic migration scripts includes this update. - Immutable View Models: Migrated all view models (including the
EditorViewModel
,AttributeViewModel
,AttributeBindingModel
, and derivatives) from classes to read-only, immutable C# 9.0record
types (77f304f). ClientResources
: Added a newStyleSheets
andScripts
collection ofClientResource<T>
objects to theAttributeDescriptorViewModel
as a way of registering client-side stylesheets and JavaScript files from plugins, while having them de-duplicated and injected in the appropriate location in the header or footer (71c2ab9, ce3477a).- Client Namespace: Added a new
GetNamespacedUri()
method for prefixing the client resource paths with the plugin assembly's namespace, as required for Razor Class Libraries (4c7bf0f). - Code Analysis: Implemented the latest version of Microsoft's code analysis library (
NetAnalyzers
), and implemented the feedback it exposed (71b7783), including nullable reference annotations (185d4bf). - Razor Runtime Compilation: Resolved issues preventing Razor Runtime Compilation from working correctly (51925b1). This affects development of the Editor itself.
v4.6.0
This is primarily a maintenance update focused on a number of under-the-hood improvements, such as adoption of C# 9.0, as well as some minor bug fixes related to the user interface, such as ensuring nested topics can be rolled back. Normally, this would be considered a patch (i.e., 4.5.1) since it contains no new features. We're sticking with 4.6.0, however, to align it with the corresponding release of OnTopic 4.6.0.
Bug Fixes
- Reset content type in
ContentTypeListViewComponent
when modal window is triggered (b6868cf) - Display
PermittedContentTypes
from parent topic on left rail when creating a new topic (9beeb8a) - Hide
DisableDelete
warning when creating new topics of protected content types (5ddbd26) - Allow rollback to previous versions of nested topics within large-window modals (780e7ed)
- Ensure versions in version history don't wrap even when using long date/times (0072c55)
Improvements
- Updated code to use C# 9.0 pattern matching and implicitly typed initializers (4962a85)
- Updated to latest versions of internal packages, including OnTopic 4.6.0 (dee88f0)
- Updated to latest version of Code Analysis and fixed most issues introduced with C# 9.0 (11331ea)
v4.5.0
The primary focus of this update is to introduce two new attribute types—InstructionAttribute
and IncomingRelationshipAttribute
. Neither of these persist actual attribute values to the edited topic; instead, they help fill out the instructions and the object graph for the editor by exposing information that might not otherwise be obvious by only looking at the current topic's attributes. This update also includes various user interface improvements, including stick navigation and some basic responsiveness. Finally, this includes a couple of bug fixes—most notably, a bug inherited from the underlying OnTopic Library which prevents attribute values from being deleted via the editor.
New Features
- Updated the View Page link to open the page in a new tab (853bdd7)
- Updated the
TextAreaViewComponent
to supportMinimumLength
(57edf1e) - Updated the
TextViewComponent
(06b57c9) to supportMinimumLength
(d2699bc), a regular expressionPattern
validation (a7fa26c), and an optionalValidationMessage
(92c147e) - Introduced the new
InstructionViewComponent
, which allows instructional text to be embedded in the editor at any point among the attributes (e8e6261) - Introduced the new
IncomingRelationshipViewComponent
(32edc40), which exposes a list of incoming relationships, optionally filted byAttributeKey
andAttributeValue
(407c040)
Improvements
- Updated style of
HtmlViewComponent
to help avoid a flash of unstyled content (FOUC) as WYSIWYG editor script is applied (bb727cd) - Updated style of
TokenizedTopicListViewComponent
so that it looks similar to theTextViewComponent
(fa277f7) - Updated style and interaction patterns of the
RelationshipViewComponent
, make it easier to navigate the tree and select nodes (2e0ddb4) - Updated navigation and topic information callout to be sticky, while introducing basic responsive features for callouts, buttons, navigation, and title (643d856)
Bug Fixes
- Ensured that errors in dropdown menus (e5e2f7c) and text areas (0221298) are correctly reported in their corresponding tabs so editors can see where an error has occurred (0c4bb2d)
- Fixed a bug where a deleted attribute might not get saved since deleted attributes didn't result in the
AttributeValueCollection
being marked asIsDirty()
(7777eec)
Cleanup
- Deferred JavaScript resources to improve page load time (e0664a8)
- Import of Twitter Bootstrap directly via SCSS, instead of via compiled CSS; this allows us to only import styles associated with components we're actually using (92822dc)
- Minor improvements to code (96e9dfa), such as streamlining deleted attribute logic (7777eec), reducing some flashes of unstyled content (FOUC) (bb727cd), and removing legacy code (1052cf8, 587dc0d)
- Explicitly set the
isRecursive
parameter ofITopicRepository.Delete()
to ensure forward compatibility, as the parameter default will change in the next version of the OnTopic library (ba2acb4) - Marked the
DisplayOptionsViewComponent
(f910e53) and theDefaultAttributeTypeViewComponent
(4f53e36) as deprecated in anticipation of OnTopic Editor 5.0.0 (def412e) - Marked a number of members on
AttributeDescriptorTopicViewModel
as deprecated, including the ill-conceivedCssClass
attribute, in anticipation of OnTopic Editor 5.0.0 (57edf1e)
v4.4.0
While this update primarily focuses on some minor bug fixes in the Editor itself, it also includes a dependency on OnTopic 4.4.0, which introduces updates and bug fixes which are of specific relevance to the OnTopic Editor. Notably, it resolves a number of issues with Oroborus Configuration in which updates to ContentTypeDescriptor
and AttributeDescriptor
topics wouldn't take immediate effect in the Editor. This was caused by versioning conflicts between two competing caches: CachedTopicRepositor._cache
and TopicRepositoryBase._contentTypeDescriptors
. By introducing a number of updates to help ensure these are synchronized, these should now always be pointing to the same object references, thus avoiding version conflicts when updating them in the Editor.
Features
- Allow
SelectableTreeView
, which is used by theRelationshipsViewComponent
, to auto-expand to ensure existing selections are visible (4fee666)
Bug Fixes
- The
SelectableTreeView
, which is used by theRelationshipsViewComponent
, once again correctly supports multiple instances on a page (9b21224) - Fixed a bug in which the underlying
ITopicRepository.Move()
wasn't getting correct metadata due to the parent being prematurely reset inEditorController.Move()
(eaf9b59)
Maintenance
- Updated npm and NuGet dependencies, including resolution of several security vulnerabilities, and the introduction of OnTopic 4.4.0 (b1c7f3c)
v4.3.1
Minor maintenance release containing some bug fixes and minor feature improvements.
Summary
- Significant cleanup of the CKEditor plugin used for the
HtmlViewComponent
(acecc86) - Fixes a major bug which prevented topics with an empty
TopicListViewComponent
from being saved (d12e3d4) - Addresses a confusing user interface decision where a removed attribute value would continue to be displayed as placeholder text (752f9da)
CKEditor
- Removed extraneous toolbars (110a9ac, 619360e), and tidied up the formatting and layout of the default toolbar (6fdf1a3, 37d06d3, 168b6ce)
- Removed features that shouldn't be used in most cases, such as underline (2e60363), custom fonts (6056f01), and duplicate buttons (33f88a0)
- Removed all customer-oriented customizations and styles (74712c0); these can now be overwritten on a per client basis
- Removed out-of-the-box Spell Check As You Type (SCAYT), in favor of browser default spell check (a4790fe, 3bb9de4)
- Removed commented out items that weren't being actively used (f997f5e, 8ad4bb3)
- Cleaned up formatting of files and introduced modern commenting and indentation standards (99c9eb9, 9ee289e, 452fd19)
- Fixed some issues with the default stylesheet (3175936, 2c02393, b3966c5)
Bug Fixes
- Fixed but where removing an empty
TopicListViewComponent
from the interface would break ASP.NET Core data binding (af5e765) - Updated
InheritedAttributes
to use values from theDerivedTopic
so that when a value is deleted, it doesn't reappear as a placheolder (15ea21f) - Updated the
::placeholder
pseudoclass so it's clearer what is an explicitly defined value and what is an inherited value (c56c188)
v4.3.0
This update builds off of OnTopic Library 4.3.0 and the OnTopic Data Transfer 1.2.0 library in order to provide support for connecting to and bootstrapping empty repositories.
Notably, this includes the ability to dynamically add or remove content type and attribute descriptors. Not only does this allow some configuration changes made via the OnTopic Editor to be immediately available to the interface, it also allows new or reference configurations to be imported using the OnTopic Data Transfer library integration. Finally, this update takes advantage of many performance and reliability improvements to the underlying libraries, particularly regarding recursive saves (as done during Import()
).
Note: This update doesn't yet support dynamically updating attribute values of content type or attribute descriptors when using the
CachedTopicRepository
. This is because the baseGetContentTypeDescriptors()
cache references different topic objects than those in theCachedTopicRepository
. This oversight will be reevaluated in a future release.
Features
- The editor will now tolerate binding to topics with missing content type descriptors (06f065b, 34cdeec). This allows it to display a default
Root
topic even if theContainer
content type hasn't yet been created. Of course, no editor form will be present in these scenarios. - Allow creation of the root topic on
Import()
(c51a141). Previously, the editor assumed that the root topic already existed.
Bug Fixes
- Ensured implicit topic references (i.e., attributes ending in 'Id' and pointing to a
Topic.Id
) can be resolved based on a singleImport()
by rearranging theImport()
andSave()
logic (a01e92e). - Changed the implicit default root from
Web
toRoot
; this not only allows support for an empty database (whereWeb
won't yet exist), but also fixes issues when querying the/JSON
service where it would only query theWeb
branch, thus making it impossible to reference e.g. theConfiguration
branch with aQueryableTopicListAttribute
orTopicReferenceAttribute
(1069b34). - Ensure the
TopicReferenceAttributeViewComponent
honors the current key, instead of being hard-coded to useTopicID
(eb84431). - Expose new
ExportOptions.TranslateTopicPointers
opt-out to theExport()
interface (5630bb7). - Fix link to the
ContentTypeDescriptor
from the editor interface (9b4ebf6).
TopicListAttributeViewComponent
- Ensure
DefaultLabel
isn't persisted as the value if not topic is selected (1be3eb3). - Resolve runtime exception when using
RelativeTopicBase
'sContentTypeDescriptor
(339fa6d). - Gracefully fail if the
TopicList
's scope cannot be resolved (9ecf880). - Ensure
RelativeTopicBase
works correctly when creating new topics (7f027c6). - Introduce missing support for the
RelativeTopicPath
attribute (b727cf1). - Hide the
TopicListViewComponent
if no values are returned (753d0a4).
Code Changes
- Updated to use newly created
Topic.IsNew
property for detecting if topic references are valid (9a79cc8).
Maintenance
- Updated various dependencies, including client-side dependencies (4b996cc).
v4.2.0
Maintenance release including a number of bug fixes, including those implemented in the corresponding release of the OnTopic Library 4.2.0.
Bug Fixes
- Allow rollback of versions created since the application was last reset (37eb773)
- Correctly refresh the page or topic tree when moving a topic to ensure URLs are updated (a33a950)
- Disable required field validation for topics derived from other topics (5044e46)
- Set the HTML (browser) title to the name of the current topic (1ba3931)
Code Changes
- Significant refactoring of tree view scripts to aid in maintainability (1ba3931)
v4.1.0
OnTopic Editor 4.1.0 introduces the ability to export entire branches of the Topic graph as a JSON file, as well as the ability to import that JSON file back into OnTopic.
The import process includes support for a variety of import strategies, such as only adding missing topics, attributes, and relationships; merging based on the last updated date; overwriting all values; or replacing the entire tree—in which case topics, attributes, and relationships that are not found in the JSON file will be removed from OnTopic.