Ejemplo n.º 1
0
        internal static async Task <string> RenderRecordsHTMLAsync(YHtmlHelper htmlHelper, TreeDefinition treeModel, List <object> records)
        {
            HtmlBuilder hb = new HtmlBuilder();

            if (records.Count > 0)
            {
                TreeSetup setup = GetTreeSetup(treeModel);

                hb.Append("<ul class='t_sub'>");
                foreach (TreeEntry record in records)
                {
                    hb.Append(await RenderRecordHTMLAsync(htmlHelper, treeModel, setup, record));
                }
                hb.Append("</ul>");
            }
            return(hb.ToString());
        }
Ejemplo n.º 2
0
        internal static TreeSetup GetTreeSetup(TreeDefinition treeModel)
        {
            TreeSetup setup = new TreeSetup()
            {
                DragDrop                = treeModel.DragDrop,
                HoverCss                = treeModel.UseSkinFormatting ? "ui-state-hover" : "tg_hover",
                HighlightCss            = treeModel.UseSkinFormatting ? "ui-state-highlight" : "tg_highlight",
                DisabledCss             = treeModel.UseSkinFormatting ? "ui-state-disabled" : "tg_disabled",
                RowHighlightCss         = treeModel.UseSkinFormatting ? "ui-state-highlight" : "tg_highlight",
                RowDragDropHighlightCss = treeModel.UseSkinFormatting ? "ui-state-active" : "tg_dragdrophighlight",
                SelectedCss             = treeModel.UseSkinFormatting ? "ui-state-active" : "t_select",
                ContentTargetId         = treeModel.ContentTargetPane,
                ContentTargetPane       = treeModel.ContentTargetPane,
                AjaxUrl = treeModel.AjaxUrl,
            };

            return(setup);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Called by the framework when the component needs to be rendered as HTML.
        /// </summary>
        /// <param name="model">The model being rendered by the component.</param>
        /// <returns>The component rendered as HTML.</returns>
        public async Task <string> RenderAsync(object model)
        {
            HtmlBuilder hb = new HtmlBuilder();

            TreeDefinition treeModel = GetSiblingProperty <TreeDefinition>($"{FieldName}_TreeDefinition");

            IEnumerable <object> ienum = model as IEnumerable <object>;
            List <TreeEntry>     data  = (from t in ienum select(TreeEntry)(object) t).ToList();


            //IEnumerator<object> ienumerator = ienum.GetEnumerator();

            string idEmpty = UniqueId();

            TreeSetup setup = GetTreeSetup(treeModel);

            // Headers
            string headerHTML = await GetHeaderAsync(treeModel, data, setup);

            string html = await RenderHTML(HtmlHelper, treeModel, data, setup);

            string dd = "";

            if (treeModel.DragDrop)
            {
                dd = " ondragstart='YetaWF_ComponentsHTML.TreeComponent.onDragStart(event)' ondrop='YetaWF_ComponentsHTML.TreeComponent.onDrop(event)' ondragend='YetaWF_ComponentsHTML.TreeComponent.onDragEnd(event)' ondragover='YetaWF_ComponentsHTML.TreeComponent.onDragOver(event)'";
            }

            hb.Append($@"
<div id='{treeModel.Id}' class='yt_tree t_display {(treeModel.UseSkinFormatting ? "tg_skin ui-corner-top ui-widget ui-widget-content" : "tg_noskin")}'{dd}>
    {headerHTML}
    {html}
</div>");

            Manager.ScriptManager.AddLast($"new YetaWF_ComponentsHTML.TreeComponent('{treeModel.Id}', {JsonConvert.SerializeObject(setup, new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml })});");

            return(hb.ToString());
        }
Ejemplo n.º 4
0
        internal static async Task <string> RenderRecordHTMLAsync(YHtmlHelper htmlHelper, TreeDefinition treeModel, TreeSetup setup, TreeEntry record)
        {
            HtmlBuilder hb = new HtmlBuilder();

            //bool highlight;
            //ObjectSupport.TryGetPropertyValue<bool>(record, "__highlight", out highlight, false);
            //bool lowlight;
            //ObjectSupport.TryGetPropertyValue<bool>(record, "__lowlight", out lowlight, false);

            //string lightCss = "";
            //if (highlight)
            //    lightCss = "tg_highlight";
            //else if (lowlight)
            //    lightCss = "tg_lowlight";

            // check for SubEntriesProperty
            bool             collapsed = record.Collapsed;
            bool             dynSubs   = false;
            List <TreeEntry> items     = record.SubEntries;

            if (items == null || items.Count == 0)
            {
                items = null;
                if (record.DynamicSubEntries)
                {
                    dynSubs = record.DynamicSubEntries;
                }
                else
                {
                    collapsed = false;
                }
            }

            string urlNew     = record.UrlNew;
            string urlContent = record.UrlContent;

            // selected
            bool   selected = record.Selected;
            string selectedCss = "", selectedLICss = "";

            if (selected)
            {
                selectedCss   = $" {setup.SelectedCss}";
                selectedLICss = " class='t_select'";
            }
            string extraCss = "";

            if (record.ExtraCss != null)
            {
                extraCss = $" {record.ExtraCss}";
            }

            string caret;
            string icon;

            if (dynSubs || items != null)
            {
                if (collapsed)
                {
                    caret = "<i class='t_icright'>&nbsp;</i>";
                }
                else
                {
                    caret = "<i class='t_icdown'>&nbsp;</i>";
                }

                if (string.IsNullOrWhiteSpace(urlNew) && string.IsNullOrWhiteSpace(urlContent))
                {
                    icon = "<i class='t_icfolder'>&nbsp;</i>";
                }
                else
                {
                    icon = "<i class='t_icfile'>&nbsp;</i>";
                }
            }
            else
            {
                caret = "<i class='t_icempty'>&nbsp;</i>";
                icon  = "<i class='t_icfile'>&nbsp;</i>";
            }

            string dd = "";

            if (treeModel.DragDrop)
            {
                dd = " draggable='true'";
            }

            // entry

            string text = await htmlHelper.ForDisplayAsync(record, nameof(TreeEntry.Text));

            string beforeText = null;

            if (record.BeforeText != null)
            {
                beforeText = await htmlHelper.ForDisplayAsync(record, nameof(TreeEntry.BeforeText));
            }
            string afterText = null;

            if (record.AfterText != null)
            {
                afterText = await htmlHelper.ForDisplayAsync(record, nameof(TreeEntry.AfterText));
            }

            if (!string.IsNullOrWhiteSpace(text))
            {
                text = text.Trim(new char[] { '\r', '\n' }); // templates can generate a lot of extra \r\n which breaks filtering
            }
            if (string.IsNullOrWhiteSpace(text))
            {
                text = "&nbsp;";
            }

            string output;

            if (!string.IsNullOrWhiteSpace(urlNew))
            {
                output = $"<a class='t_entry{selectedCss}{extraCss} yaction-link' target='_blank' href='{HAE(urlNew)}'{dd}>{text}</a>";
            }
            else if (!string.IsNullOrWhiteSpace(urlContent))
            {
                output = $"<a class='t_entry{selectedCss}{extraCss} yaction-link' data-contenttarget='{treeModel.ContentTargetId}' data-contentpane='{treeModel.ContentTargetPane}' href='{HAE(urlContent)}'{dd}>{text}</a>";
            }
            else
            {
                output = $"<a class='t_entry{selectedCss}{extraCss}' data-nohref='true' href='#'{dd}>{text}</a>";
            }

            string recData = "";

            if (treeModel.JSONData)
            {
                string json = JsonConvert.SerializeObject(record, JsonSettings);
                recData = $" data-record='{HAE(json)}'";
            }

            hb.Append($@"
 <li {recData}{selectedLICss}>
  {caret}
  {icon}{beforeText}{output}{afterText}");

            // sub entries
            if (items != null)
            {
                string collapsedStyle = "";
                if (collapsed)
                {
                    collapsedStyle = " style='display:none'";
                }

                hb.Append($@"
 <ul{collapsedStyle} class='t_sub'>");

                foreach (TreeEntry item in items)
                {
                    hb.Append(await RenderRecordHTMLAsync(htmlHelper, treeModel, setup, item));
                }

                hb.Append($@"
 </ul>");
            }

            hb.Append($@"
 </li>");
            return(hb.ToString());
        }
Ejemplo n.º 5
0
        internal async Task <string> RenderHTML(YHtmlHelper htmlHelper,
                                                TreeDefinition treeModel, List <TreeEntry> data, TreeSetup setup)
        {
            HtmlBuilder hb = new HtmlBuilder();

            string styleCss = "";

            if (data != null && data.Count > 0)
            {
                styleCss = " style='display:none'";
            }

            hb.Append($@"
<div class='tg_emptytr'{styleCss}>
    <div class='tg_emptydiv'>
        {HE(treeModel.NoRecordsText)}
    </div>
</div>");

            if (data != null && data.Count > 0)
            {
                hb.Append($@"
<ul class='tg_root t_sub'>");

                foreach (TreeEntry record in data)
                {
                    hb.Append(await RenderRecordHTMLAsync(htmlHelper, treeModel, setup, record));
                }

                hb.Append($@"
</ul>");
            }
            else
            {
                // when initially rendering a tree with 0 records, we have to prepare for all templates
                await YetaWFComponentExtender.AddComponentForType(treeModel.RecordType);
            }

            return(hb.ToString());
        }
Ejemplo n.º 6
0
        private Task <string> GetHeaderAsync(TreeDefinition treeModel, List <TreeEntry> data, TreeSetup setup)
        {
            HtmlBuilder hb = new HtmlBuilder();

            if (treeModel.ShowHeader)
            {
                PropertyData prop = ObjectSupport.GetPropertyData(treeModel.RecordType, nameof(TreeEntry.Text));
                // Caption
                string caption = treeModel.Header.ToString();
                if (string.IsNullOrWhiteSpace(caption))
                {
                    caption = prop.GetCaption(null);
                }
                // Description
                string description = treeModel.HeaderTooltip.ToString();
                if (string.IsNullOrWhiteSpace(description))
                {
                    description = prop.GetDescription(null);
                }

                string alignCss = "tg_left";

                // Render column header
                hb.Append($@"
    <div class='{alignCss} tg_header{(treeModel.UseSkinFormatting ? " ui-state-default" : "")}' {Basics.CssTooltip}='{HAE(description ?? "")}'>
        <span>{HE(caption)}</span>
    </div>");
            }
            return(Task.FromResult(hb.ToString()));
        }