Files
Umbraco-CMS/src/Umbraco.Core/Trees/TreeNode.cs
Elitsa Marinovska dd5f400cf3 Netcore: Migration of Model classes from Umbraco.Infrastructure to Core (#9404)
* Migrating more model, mapping and tree classes

* Migrating files from Mapping dir without Newtonsoft dependency

* Migrating files from PublishedContent and Editors dirs without Newtonsoft dependency + some more of the same kind

* Migrating DataType class without the usage of Newtonsoft.Json and making the corresponding changes to all classes affected

* Combining 3 ContentExtensions files into 1

* Refactoring from migrating ContentExtensions

* Migrating more classes

* Migrating ContentRepositoryExtensions - combining it with existing file in Umbraco.Core

* removing Newtonsoft json dependency & migrating file. Adding partial migration of ConfigurationEditor, so PropertyTagsExtensions can be migrated

* Migrating ContentTagsExtensions, and refactoring from changes in PropertyTagsExtensions

* Changes that should be reverted once ConfigurationEditor class is fully migrated

* VS couldn't find Composing, so build was failing. Removing the using solves the problem

* Handling a single case for deserializing a subset of an input

* Small changes and added tests to JsonNetSerializer

Signed-off-by: Bjarke Berg <mail@bergmania.dk>

* Migrated ConfigurationEditor

Signed-off-by: Bjarke Berg <mail@bergmania.dk>

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2020-11-17 20:27:10 +01:00

119 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Web.Models.ContentEditing;
namespace Umbraco.Web.Models.Trees
{
/// <summary>
/// Represents a model in the tree
/// </summary>
/// <remarks>
/// TreeNode is sealed to prevent developers from adding additional json data to the response
/// </remarks>
[DataContract(Name = "node", Namespace = "")]
public class TreeNode : EntityBasic
{
/// <summary>
/// Internal constructor, to create a tree node use the CreateTreeNode methods of the TreeApiController.
/// </summary>
/// <param name="nodeId"></param>
/// <param name="parentId">The parent id for the current node</param>
/// <param name="getChildNodesUrl"></param>
/// <param name="menuUrl"></param>
public TreeNode(string nodeId, string parentId, string getChildNodesUrl, string menuUrl)
{
if (nodeId == null) throw new ArgumentNullException(nameof(nodeId));
if (string.IsNullOrWhiteSpace(nodeId)) throw new ArgumentException("Value can't be empty or consist only of white-space characters.", nameof(nodeId));
Id = nodeId;
ParentId = parentId;
ChildNodesUrl = getChildNodesUrl;
MenuUrl = menuUrl;
CssClasses = new List<string>();
//default
Icon = "icon-folder-close";
Path = "-1";
}
[DataMember(Name = "parentId", IsRequired = true)]
public new object ParentId { get; set; }
/// <summary>
/// A flag to set whether or not this node has children
/// </summary>
[DataMember(Name = "hasChildren")]
public bool HasChildren { get; set; }
/// <summary>
/// The tree nodetype which refers to the type of node rendered in the tree
/// </summary>
[DataMember(Name = "nodeType")]
public string NodeType { get; set; }
/// <summary>
/// Optional: The Route path for the editor for this node
/// </summary>
/// <remarks>
/// If this is not set, then the route path will be automatically determined by: {section}/edit/{id}
/// </remarks>
[DataMember(Name = "routePath")]
public string RoutePath { get; set; }
/// <summary>
/// The JSON url to load the nodes children
/// </summary>
[DataMember(Name = "childNodesUrl")]
public string ChildNodesUrl { get; set; }
/// <summary>
/// The JSON url to load the menu from
/// </summary>
[DataMember(Name = "menuUrl")]
public string MenuUrl { get; set; }
/// <summary>
/// Returns true if the icon represents a CSS class instead of a file path
/// </summary>
[DataMember(Name = "iconIsClass")]
public bool IconIsClass
{
get
{
if (Icon.IsNullOrWhiteSpace())
{
return true;
}
if (Icon.StartsWith(".."))
return false;
//if it starts with a '.' or doesn't contain a '.' at all then it is a class
return Icon.StartsWith(".") || Icon.Contains(".") == false;
}
}
/// <summary>
/// Returns the icon file path if the icon is not a class, otherwise returns an empty string
/// </summary>
[DataMember(Name = "iconFilePath")]
public string IconFilePath
{
get
{
// TODO: Is this ever actually used? If not remove, if so, add setter.
return string.Empty;
}
}
/// <summary>
/// A list of additional/custom css classes to assign to the node
/// </summary>
[DataMember(Name = "cssClasses")]
public IList<string> CssClasses { get; private set; }
}
}