internal void DuplicateWebresource(WebresourceNode node)
        {
            var selectedResource = node.Resource;
            var map = WebresourceMapper.Instance.Items.First(i => (int)i.Type == selectedResource.Type);

            var nwrDialog = new NewWebResourceDialog(map.Extension, OrganizationMajorVersion);

            if (nwrDialog.ShowDialog(mainControl) == DialogResult.OK)
            {
                var name = $"{((FolderNode)node.Parent).ResourceFullPath}/{nwrDialog.WebresourceName}";

                var resource = selectedResource.Clone(name);
                if (mainControl.WebresourcesCache.All(w => w.Name != resource.Name))
                {
                    mainControl.WebresourcesCache.Add(resource);
                }

                AddSingleNode(resource, name.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries), (FolderNode)node.Parent);

                node.Parent.Expand();
            }
        }
        public WebresourceNode AddSingleNode(Webresource resource, string[] nameParts, FolderNode folder = null)
        {
            var             fileName = nameParts.Last();
            WebresourceType type     = WebresourceType.Auto;

            if (resource.Type != 0)
            {
                type = (WebresourceType)resource.Type;
            }

            if (type == WebresourceType.Auto)
            {
                if (fileName.IndexOf(".", StringComparison.Ordinal) < 0)
                {
                    if (resource.Type == 0)
                    {
                        return(null);
                    }

                    type = (WebresourceType)resource.Type;
                }
                else
                {
                    type = Webresource.GetTypeFromExtension(fileName
                                                            .Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last());
                }
            }

            WebresourceNode node = null;

            switch (type)
            {
            case WebresourceType.WebPage:
                node = new WebpageNode(resource, Settings);
                break;

            case WebresourceType.Css:
                node = new CssNode(resource, Settings);
                break;

            case WebresourceType.Data:
                node = new DataNode(resource, Settings);
                break;

            case WebresourceType.Gif:
                node = new GifNode(resource, Settings);
                break;

            case WebresourceType.Ico:
                node = new IcoNode(resource, Settings);
                break;

            case WebresourceType.Jpg:
                node = new JpgNode(resource, Settings);
                break;

            case WebresourceType.Png:
                node = new PngNode(resource, Settings);
                break;

            case WebresourceType.Resx:
                node = new ResxNode(resource, Settings);
                break;

            case WebresourceType.Script:
                node = new JavaScriptNode(resource, Settings);
                break;

            case WebresourceType.Silverlight:
                node = new SilverlightNode(resource, Settings);
                break;

            case WebresourceType.Vector:
                node = new VectorNode(resource, Settings);
                break;

            case WebresourceType.Xsl:
                node = new XslNode(resource, Settings);
                break;
            }

            resource.Node = node;

            if (folder != null && node != null)
            {
                node.ForeColor = resource.State == WebresourceState.Saved ? Color.Blue :
                                 resource.State == WebresourceState.Draft ? Color.Red : Color.Black;

                folder.Nodes.Add(node);

                (node.Parent as FolderNode)?.SetFolderColor();
            }

            return(node);
        }