Пример #1
0
        public string Compile(bool minify)
        {
            var js = jslastvalid;
            var html = htmllastvalid;

            // Merge fields
            var output = new StringBuilder(html);
            output.Replace("%resourcepath%", Program.BlobPathResource);
            output.Replace("%build%", Program.Config.Configuration.Build.ToString());
            output.Replace("%buildserial%", Program.Config.Configuration.BuildSerial.ToString());
            html = output.ToString();

            // Minify
            if (minify) {
                js = Minify.MinifyJS(js);
                html = Minify.MinifyHTML(html);
            }

            // Add JS
            var doc = new HtmlDocument();
            doc.LoadHtml(html);
            doc.GetElementbyId("_script_").AppendChild(doc.CreateComment(js));

            return doc.DocumentNode.OuterHtml;
        }
Пример #2
0
        public void Parse(string input, string[] args = null)
        {
            var xxr = new XamlXmlReader(new StringReader(input), new XamlSchemaContext());
            var graphReader = new XamlObjectWriter(xxr.SchemaContext);

            while (xxr.Read())
                graphReader.WriteNode(xxr);

            var page = (Page)graphReader.Result;

            // Map our generators
            var g = new Generator();
            g.Map<Page, PageGeneratorBlock>();
            g.Map<Button, ButtonGeneratorBlock>();
            g.Map<StackPanel, StackPanelGeneratorBlock>();

            var doc = new HtmlDocument();
            var html = doc.CreateElement("html");

            g.Generate(html, page);
            // HTML5 Doc type
            doc.DocumentNode.AppendChild(doc.CreateComment("<!DOCTYPE html>"));
            doc.DocumentNode.AppendChild(html);

            doc.Save("test.htm");

            var cssContents = g.GenerateStyles(page);
            File.WriteAllText("XamlCore.css", cssContents);
        }
Пример #3
0
        public IHtmlComment AddComment(IHtmlContainer container, int index, string comment)
        {
            var node = _document.CreateComment(comment);

            AddNode(container, index, node);

            return(node.AsComment());
        }
Пример #4
0
        public static string Html(string value)
        {
            Contract.Requires(null != value, "value");

            // Load
            var doc = new HtmlDocument();
            doc.LoadHtml(value);

            // Minify all embeded CSS
            var styleNodes = doc.DocumentNode.SelectNodes("//style");
            if (null != styleNodes) {
                foreach (var item in styleNodes) {
                    item.InnerHtml = CascadingStyle(item.InnerHtml);
                }
            }

            // Strip comments
            var comments = doc.DocumentNode.SelectNodes("//comment()");
            if (null != comments) {
                foreach (var item in comments) {
                    if (item.InnerText.Substr(0, 9) != "<!DOCTYPE") {
                        item.Remove();
                    }
                }
            }

            // Minify all embeded JS
            var scriptNodes = doc.DocumentNode.SelectNodes("//script");
            if (null != scriptNodes) {
                foreach (var item in scriptNodes) {
                    var script = JavaScript(item.InnerHtml);
                    item.RemoveAllChildren();
                    item.AppendChild(doc.CreateComment(script));
                }
            }

            //https://github.com/markbeaton/TidyManaged ?

            // Convert back to string
            value = doc.DocumentNode.OuterHtml;

            value = Regex.Replace(value, @"\>\s+\<", "><", RegexOptions.Compiled | RegexOptions.Multiline);// Convert multiple concecutive spaces into one
            value = Regex.Replace(value, @"\s+", " ", RegexOptions.Compiled | RegexOptions.Multiline);// Convert multiple concecutive spaces into one
            value = Regex.Replace(value, @"^\s+", "", RegexOptions.Compiled | RegexOptions.Multiline);// Strip space at start of line
            value = Regex.Replace(value, "[\\r\\n]", string.Empty, RegexOptions.Compiled | RegexOptions.Multiline);// Strip newlines

            return value;
        }
		/// <summary>
		/// Converts the MathML blocks to be readable by OneNote
		/// </summary>
		/// <param name="htmlDoc"></param>
		private void ConvertMathMl(HtmlDocument htmlDoc)
		{
			HtmlNodeCollection mathNodes = htmlDoc.DocumentNode.SelectNodes("//math");
			if (mathNodes == null)
			{
				return;
			}

			foreach (var mathNode in mathNodes.ToList())
			{
				mathNode.Attributes.RemoveAll();
				HtmlAttribute mathMlNamespaceAttr = htmlDoc.CreateAttribute("xmlns:mml", MathMlNameSpace);
				mathNode.Attributes.Add(mathMlNamespaceAttr);

				foreach (var node in mathNode.DescendantsAndSelf())
				{
					node.Name = "mml:" + node.Name;
				}

				string newMathMlString = String.Format(MathMlOutline, mathNode.OuterHtml);
				HtmlCommentNode newMathNode = htmlDoc.CreateComment(newMathMlString);
				mathNode.ParentNode.ReplaceChild(newMathNode, mathNode);
			}
		}
Пример #6
0
 public static string ParseEntity(string entityHtml)
 {
     //HTML Agility pack drops closing option tags for some reason (bug?)
     HtmlNode.ElementsFlags.Remove("option");
     HtmlDocument html = new HtmlDocument();
     html.LoadHtml(String.Format("<html>{0}</html>", entityHtml));
     var entities = html.DocumentNode.SelectNodes("//*[@data-componentid]");
     var dummyTemplateId = NullUri;
     var dummyTemplateModified = Epoch;
     string isRepositoryPublished = "false";
     if (entities != null)
     {
         foreach (var entity in entities)
         {
             string compId = ReadAndRemoveAttribute(entity, "data-componentid");
             string compModified = ReadAndRemoveAttribute(entity, "data-componentmodified", Epoch);
             string templateId = ReadAndRemoveAttribute(entity, "data-componenttemplateid", NullUri);
             string templateModified = ReadAndRemoveAttribute(entity, "data-componenttemplatemodified", Epoch);
             // store template id as dummy default for next round (all our component templates generate the same output anyways)
             if (!templateId.Equals(NullUri))
             {
                 dummyTemplateId = templateId;
                 dummyTemplateModified = templateModified;
             }
             else
             {
                 // XPM does not like null uris for templates, so use defaults set before
                 templateId = dummyTemplateId;
                 templateModified = dummyTemplateModified;
                 // using a dummy template, so this should be considered a dynamic cp
                 isRepositoryPublished = IsQueryBased;
             }
             if (!String.IsNullOrEmpty(compId))
             {
                 HtmlCommentNode cpData = html.CreateComment(String.Format(ComponentPresentationFormat, compId, compModified, templateId, templateModified, isRepositoryPublished));
                 entity.ChildNodes.Insert(0, cpData);
             }
             //string lastProperty = "";
             //int index = 1;
             var properties = entity.SelectNodes("//*[@data-xpath]");
             if (properties != null && properties.Count > 0)
             {
                 foreach (var property in properties)
                 {
                     var xpath = ReadAndRemoveAttribute(property, "data-xpath");
                     //TODO index of mv fields
                     //index = propName == lastProperty ? index+1 : 1;
                     //lastProperty = propName;
                     HtmlCommentNode fieldData = html.CreateComment(String.Format(FieldFormat, xpath));
                     if (property.HasChildNodes)
                     {
                         property.ChildNodes.Insert(0, fieldData);
                     }
                     else
                     {
                         property.ParentNode.InsertBefore(fieldData, property);
                     }
                 }
             }
         }
     }
     return  html.DocumentNode.SelectSingleNode("/html").InnerHtml;
 }
Пример #7
0
        public static string ParseRegion(string regionHtml)
        {
            HtmlDocument html = new HtmlDocument();
            html.LoadHtml(String.Format("<html>{0}</html>", regionHtml));
            var entity = html.DocumentNode.SelectSingleNode("//*[@data-region]");
            if (entity != null)
            {
                string name = ReadAndRemoveAttribute(entity, "data-region");

                // TODO determine min occurs and max occurs for the region
                HtmlCommentNode regionData = html.CreateComment(MarkRegion(name));
                entity.ChildNodes.Insert(0, regionData);
            }
            return html.DocumentNode.SelectSingleNode("/html").InnerHtml;
        }
Пример #8
0
		/// <summary>
		/// Replace http url link to ScriptNotify container in order to open IE in preview webview.
		/// </summary>
		/// <param name="content">A html content</param>
		/// <returns></returns>
		private static string injectScriptNotifyToHttpLink(string content)
		{
			var doc = new HtmlDocument();
			doc.LoadHtml(content);
			var headNode = doc.DocumentNode.FirstChild.FirstChild; // head tag
			if (headNode.Name.Equals("head"))
				Debug.WriteLine("head");

			// insert javascript function
			HtmlNode scriptElement = doc.CreateElement("script");
			scriptElement.Attributes.Add("type", "text/javascript");
			const string scriptContent = @"function gotoLink(args){ window.external.notify('url:' + args); return false;}";
			scriptElement.AppendChild(doc.CreateComment(scriptContent));
			headNode.AppendChild(scriptElement);

			// replace all a-tag. http://stackoverflow.com/a/23966320/361100
			foreach (HtmlNode node in doc.DocumentNode.FirstChild.Element("body").Descendants("a"))
			{
				if (node.Name.Equals("a"))
				{
					HtmlAttribute att = node.Attributes.FirstOrDefault(l => l.Name.Equals("href"));
					if (att != null)
					{
						node.Attributes.Add("onClick", String.Format("gotoLink('{0}');", att.Value));
						att.Value = "#";
					}
				}
			}
			return doc.DocumentNode.OuterHtml;
		}