public override HtmlTag Build(ElementRequest request)
        {
            HtmlTag root = new HtmlTag("a");

            root.Attr("href", request.RawValue);
            root.Attr("target", "_blank");
            root.Id(request.Accessor.FieldName);
            root.AddChildren(new HtmlTag("span"));
            return(root);
        }
        private static HtmlTag MakeRadioButton(string display, object value, string name)
        {
            DivTag  divTag      = new DivTag(display);
            HtmlTag radioButton = new RadioButtonTag(false).Attr("value", value).Attr("name", name);
            HtmlTag label       = new HtmlTag("label").Text(display);

            label.AddChildren(radioButton);
            divTag.AddChildren(label);
            return(divTag);
        }
예제 #3
0
        private HtmlTag buildHtmlForTasks(IEnumerable <Task> tasks)
        {
            var rootTag = new DivTag("tasks");
            var ul      = new HtmlTag("ul");

            tasks.OrderBy(x => x.ScheduledDate).Each(x =>
            {
                var li    = new HtmlTag("li");
                var liDiv = new DivTag("liDiv");
                var task  = x.ScheduledDate.Value.ToLongDateString() + " " + x.ScheduledStartTime.Value.ToShortTimeString();
                task     += x.ScheduledEndTime.HasValue? " To " + x.ScheduledEndTime.Value.ToShortTimeString():"";
                task     += ": " + x.TaskType.Name + " at " + x.Field.Name;
                liDiv.Text(task);
                li.AddChildren(liDiv);
                ul.AddChildren(li);
            });
            rootTag.AddChildren(ul);
            return(rootTag);
        }
 public static HtmlTag Nest(this HtmlTag tag, params HtmlTag[] children)
 {
     return(tag.AddChildren(children));
 }
        /// <summary>
        /// This function analyzes the Input-Html-Text and converts it to an analogous object structure.
        /// </summary>
        /// <param name="HtmlInput">The Html-String you want to analyze.</param>
        /// <returns></returns>
        public HtmlConstruct Analyze(string HtmlInput, HtmlTag parent)
        {
            List<HtmlElement> output = new List<HtmlElement>();
            string TagName = "";
            string TagAttributes = "";
            int StartPosition = 0;
            int EndPosition = 0;

            while (FindFirstOpeningTag(HtmlInput, out TagName, out TagAttributes, out StartPosition, out EndPosition))
            {
                string davor = HtmlInput.Substring(0, StartPosition);
                davor = RemoveAllHtmlTags(davor);
                if (davor != "") output.Add(new HtmlPlainText(parent, davor));

                int StartClosing = 0;
                int EndClosing = 0;
                if (FindClosingTag(HtmlInput, TagName, EndPosition, out StartClosing, out EndClosing))
                {
                    HtmlTag t = new HtmlTag(parent, false, TagName, AnalyzeTagAttributes(TagAttributes));
                    HtmlConstruct c = Analyze(HtmlInput.Substring(EndPosition, StartClosing - EndPosition), t);
                    t.AddChildren(c.elements);
                    output.Add(t);
                    HtmlInput = HtmlInput.Substring(EndClosing);
                }
                else
                {
                    output.Add(new HtmlTag(parent, true, TagName, AnalyzeTagAttributes(TagAttributes)));
                    HtmlInput = HtmlInput.Substring(EndPosition);
                }
            }

            if (HtmlInput != "") output.Add(new HtmlPlainText(parent, HtmlInput));

            return new HtmlConstruct(output);
        }
        /// <summary>
        /// This function replaces strings in the plain text parts of the html. So tag names will not be replaced, just the plain content of the tags.
        /// </summary>
        /// <param name="HtmlInput">The Html-String you want to replace strings in.</param>
        /// <param name="TextReplacementMap">Dictionary in which the strings and the replacements of them are defined. 
        /// (Form: Key-OldString, Value-NewString) If you want to remove a string, just replace it with a clear string.</param>
        /// <returns></returns>
        public string ReplaceStringsFromPlainTextElements(string HtmlInput, Dictionary<string, string> TextReplacementMap)
        {
            HtmlTag root = new HtmlTag(null, false, "root");
            HtmlConstruct children = Analyze(HtmlInput, root);
            root.AddChildren(children.elements);
            IHtmlTagIterator iterator = root.getIterator();

            while (iterator.hasNext())
            {
                HtmlElement element = iterator.next();
                if (element.GetType() == typeof(HtmlPlainText))
                {
                    HtmlPlainText PlainText = ((HtmlPlainText)element);
                    foreach (KeyValuePair<string, string> MapItem in TextReplacementMap)
                    {
                        PlainText.content = PlainText.content.Replace(MapItem.Key, MapItem.Value);
                    }
                }
            }

            return new HtmlConstruct(root.children).ToString();
        }
 /// <summary>
 /// This function replaces the Html-Tag-Names from the input, while it conserves the structure of the html and possible Html-Attributes.
 /// </summary>
 /// <param name="HtmlInput">The Html-String you want to replace tags in.</param>
 /// <param name="TagReplacementMap">Dictionary in which the replacement rules are defined. (Form: Key-OldTagName, Value-NewTagName)</param>
 /// <param name="ReplacementType">Whether or not unmatched Tags (and their content!) should remain in the string.</param>
 /// <returns></returns>
 public string ApplyTagReplacementMap(string HtmlInput, Dictionary<string, string> TagReplacementMap, TagReplacementTypes ReplacementType)
 {
     HtmlTag root = new HtmlTag(null, false, "root");
     HtmlConstruct ObjectConstruct = Analyze(HtmlInput, root);
     root.AddChildren(ObjectConstruct.elements);
     IHtmlTagIterator i = ObjectConstruct.getIterator();
     while (i.hasNext())
     {
         HtmlElement ele = i.next();
         if (ele.GetType() == typeof(HtmlPlainText)) // Current element is Plain Text
         {
             // ((HtmlPlainText)ele)
             // ignore
         }
         else if (ele.GetType() == typeof(HtmlTag)) // Current element is tag
         {
             // ((HtmlTag)ele)
             if (TagReplacementMap.Keys.Contains(((HtmlTag)ele).tagName)) // tag found in ReplacementMap
             {
                 // Replace
                 HtmlTag replacement = new HtmlTag(((HtmlTag)ele).getParent(), ((HtmlTag)ele).isSingleTag, TagReplacementMap[((HtmlTag)ele).tagName], ((HtmlTag)ele).children, ((HtmlTag)ele).tagAttributes);
                 int index = ((HtmlTag)ele).getParent().children.IndexOf(ele);
                 ((HtmlTag)ele).getParent().children[index] = replacement;
             }
             else // tag not found in ReplacementMap
             {
                 switch (ReplacementType)
                 {
                     case TagReplacementTypes.RemoveNotMatchedTags:
                         ((HtmlTag)ele).getParent().children.Remove(ele);
                         break;
                     case TagReplacementTypes.IgnoreNotMatchedTags:
                         // ignore
                         break;
                     case TagReplacementTypes.ConvertNotMatchedTagsToPlainText:
                         string plaintext = "";
                         IHtmlTagIterator it = ((HtmlTag)ele).getIterator();
                         while (it.hasNext())
                         {
                             HtmlElement e = it.next();
                             if (e.GetType() == typeof(HtmlPlainText)) plaintext += ((HtmlPlainText)e).content;
                         }
                         HtmlPlainText replacement = new HtmlPlainText(((HtmlTag)ele).getParent(), plaintext);
                         int index = ((HtmlTag)ele).getParent().children.IndexOf(ele);
                         ((HtmlTag)ele).getParent().children[index] = replacement;
                         break;
                     default:
                         throw new NotImplementedException("TagReplacementType not implemented!"); //break;
                 }
             }
         }
         else throw new NotImplementedException("HtmlElement Type not implemented!");
     }
     return new HtmlConstruct(root.children).ToString();
 }