Example #1
0
        public void Bind(string modelXml, string viewModelXml, string expectedViewXml)
        {
            string viewXml = XslTransforms.Bind(new TestTaskLoggingHelper(), modelXml, viewModelXml, messageAction: (o, a) =>
            {
                Console.WriteLine(a.ToString());
            });

            Assert.AreEqual(expectedViewXml, viewXml);
        }
Example #2
0
        public override bool Execute()
        {
            DateTime viewModelTimestamp = ViewModel.GetTimestamp();

            Log.LogMessage(MessageImportance.High, "Bind:");
            Log.LogMessage(MessageImportance.Normal, "ViewModel: {0}", ViewModel.ItemSpec);

            WarnIfUneven(Tuple.Create("Models", Models), Tuple.Create("Views", Views));
            foreach (var tuple in Zip(Models, Views))
            {
                ITaskItem model = tuple.Item1;
                ITaskItem view  = tuple.Item2;

                Log.LogMessage(MessageImportance.Normal, "Model: {0}", model.ItemSpec);
                Log.LogMessage(MessageImportance.Normal, "View: {0}", view.ItemSpec);

                DateTime modelTimestamp = model.GetTimestamp();

                view.RequireParentDirectory(Log);

                if (!XslTransforms.Bind(Log, modelPath: model.ItemSpec, viewModelPath: ViewModel.ItemSpec, viewPath: view.ItemSpec))
                {
                    return(false);
                }

                HtmlDocument doc = new HtmlDocument();
                doc.Load(view.ItemSpec);
                HtmlNode html = doc.DocumentNode.SelectSingleNode("//html");
                if (html != null)
                {
                    HtmlAttribute xvm = html.Attributes.FirstOrDefault(item => item.Name == "xmlns:xvm");
                    if (xvm != null)
                    {
                        xvm.Remove();
                        doc.Save(view.ItemSpec);
                    }
                }

                if (viewModelTimestamp > modelTimestamp)
                {
                    view.Touch(viewModelTimestamp);
                }
                else
                {
                    view.Touch(modelTimestamp);
                }
            }
            return(true);
        }