示例#1
0
        public ActionResult NewView(int id, string name, string style, string mode, string title, string website = "home", bool nopage = false)
        {
            var web  = App.Get().Webs[website];
            var list = web.Lists[id];
            var view = list.CreateView(name, title);

            var contentTmpl = new ContentTemplate()
            {
                //ContentType = mode == "server" ? "text/xslt" : "text/x-jquery-tmpl",
                Source = style
                         //Source = "_" + style + ".cshtml"
            };

            view.BodyTemplateXml = contentTmpl.ToXml();
            view.Save();

            if (!nopage)
            {
                var defaultView = view.Parent.DefaultView;
                web.CreatePage(view, defaultView != null && defaultView.Page != null ? defaultView.Page.ID : 0, title);
            }

            return(Redirect(view.SettingUrl));
        }
示例#2
0
        public void Transform(string text, ContentView view)
        {
            var xTmpl = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                                 "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\" exclude-result-prefixes=\"msxsl\">" +
                                 "<xsl:output method=\"html\" indent=\"yes\"/>" +
                                 "<xsl:template match=\"/\"></xsl:template></xsl:stylesheet>";
            var xsltDoc = XDocument.Parse(xTmpl);
            XNamespace ns = "http://www.w3.org/1999/XSL/Transform";

            //var text = "<div class=\"d-layout-box d-h-box\" data-box=\"hbox\"><div style=\"width: 105px; height: 100px;\" class=\"d-box d-inline\"><div class=\"d-field-holder d-inline\" data-type=\"image\" data-link=\"true\" data-label=\"Cover\" data-field=\"cover\"></div></div><div style=\"width: 441px;\" class=\"d-box d-inline\"><div class=\"d-field-holder\" data-type=\"text\" data-link=\"true\" data-label=\"Title\" data-field=\"title\"></div><div class=\"d-field-holder\" data-type=\"note\" data-link=\"true\" data-label=\"Body\" data-field=\"body\"></div></div></div>";
            //Add params
            xsltDoc.Root.Add(new XElement(ns + "param", new XAttribute("name", "appPath")),
                new XElement(ns + "param", new XAttribute("name", "web")),
                new XElement(ns + "param", new XAttribute("name", "list")),
                new XElement(ns + "param", new XAttribute("name", "view")),
                new XElement(ns + "param", new XAttribute("name", "lang"))
                );

            var tmplElement = xsltDoc.Root.Element(ns + "template");
            var listElement = new XElement("ul", new XAttribute("class", "d-view-list"));
            tmplElement.Add(listElement);
            var rowTmpl = XElement.Parse(text);
            var forEachElement = new XElement(ns + "for-each",
                new XAttribute("select", @"//rows/row"), new XElement("li",new XAttribute("class","d-view-item"), rowTmpl));

            listElement.Add(forEachElement);

            rowTmpl.DescendantsAndSelf()
                .Where(f => f.Attribute("data-field") != null)
                .ToList()
                .AsParallel()
                .ForAll(e =>
                {
                    var fieldName = e.Attribute("data-field").Value;
                    var linkToItem = e.BoolAttr("data-link");
                    var inline = e.BoolAttr("data-line");
                    var fieldType = e.Attribute("data-type").Value;

                    var showLabel = !e.BoolAttr("data-label-hidden");
                    //label=e.Element("label")
                    //e.ReplaceWith(new XElement(ns + "value-of", new XAttribute("select", fieldName)));
                    var applyTemplate = new XElement(ns + "apply-templates", new XAttribute("select", fieldName));

                    var fieldTmpl = new XElement(ns + "template", new XAttribute("match", fieldName));
                    XElement linkTmpl = null;
                    if (linkToItem)
                    {
                        linkTmpl = new XElement(ns + "element", new XAttribute("name", "a"),
                            new XElement(ns + "attribute", new XAttribute("name", "href"), new XElement(ns + "value-of", new XAttribute("select", "concat($appPath,'/',$web,'/',$lang,'/lists/',$list,'/items/',../@Slug,'.html')"))));
                    }

                    XElement fieldContentTmpl = null;

                    if (fieldType == "image")
                    {
                        fieldContentTmpl = new XElement(ns + "element", new XAttribute("name", "img"),
                            new XElement(ns + "attribute", new XAttribute("name", "src"),
                            new XElement(ns + "value-of", new XAttribute("select", ".")))
                            );
                    }
                    else
                    {
                        fieldContentTmpl = new XElement(ns + "element", new XAttribute("name", inline ? "span" : "div"),
                            new XElement(ns + "value-of", new XAttribute("select", ".")));
                    }

                    if (inline)
                        fieldContentTmpl.Add(new XAttribute("class", "d-inline"));

                    if (linkTmpl != null)
                    {
                        linkTmpl.Add(fieldContentTmpl);
                        fieldTmpl.Add(linkTmpl);
                    }
                    else
                        fieldTmpl.Add(fieldContentTmpl);

                    xsltDoc.Root.Add(fieldTmpl);
                    //new template
                    //e.ReplaceWith(applyTemplate);
                    e.Add(applyTemplate);
                });

            //return xsltDoc.ToString();
            var result = new ContentTemplate()
            {
                ContentType = this.ContentType,
                Text = xsltDoc.ToString()
            };

            view.BodyTemplateXml = result.ToXml();
        }
示例#3
0
        public ActionResult NewView(int id, string name, string style, string mode, string title, string website = "home", bool nopage = false)
        {
            var web = App.Get().Webs[website];
            var list = web.Lists[id];
            var view = list.CreateView(name, title);

            var contentTmpl = new ContentTemplate()
            {
                //ContentType = mode == "server" ? "text/xslt" : "text/x-jquery-tmpl",
                Source = style
                //Source = "_" + style + ".cshtml"
            };

            view.BodyTemplateXml = contentTmpl.ToXml();
            view.Save();

            if (!nopage)
            {
                var defaultView = view.Parent.DefaultView;
                web.CreatePage(view, defaultView != null && defaultView.Page != null ? defaultView.Page.ID : 0, title);
            }

            return Redirect(view.SettingUrl);
        }
示例#4
0
        public void Transform(string text, ContentView view)
        {
            var xTmpl = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                        "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:msxsl=\"urn:schemas-microsoft-com:xslt\" exclude-result-prefixes=\"msxsl\">" +
                        "<xsl:output method=\"html\" indent=\"yes\"/>" +
                        "<xsl:template match=\"/\"></xsl:template></xsl:stylesheet>";
            var        xsltDoc = XDocument.Parse(xTmpl);
            XNamespace ns      = "http://www.w3.org/1999/XSL/Transform";

            //var text = "<div class=\"d-layout-box d-h-box\" data-box=\"hbox\"><div style=\"width: 105px; height: 100px;\" class=\"d-box d-inline\"><div class=\"d-field-holder d-inline\" data-type=\"image\" data-link=\"true\" data-label=\"Cover\" data-field=\"cover\"></div></div><div style=\"width: 441px;\" class=\"d-box d-inline\"><div class=\"d-field-holder\" data-type=\"text\" data-link=\"true\" data-label=\"Title\" data-field=\"title\"></div><div class=\"d-field-holder\" data-type=\"note\" data-link=\"true\" data-label=\"Body\" data-field=\"body\"></div></div></div>";
            //Add params
            xsltDoc.Root.Add(new XElement(ns + "param", new XAttribute("name", "appPath")),
                             new XElement(ns + "param", new XAttribute("name", "web")),
                             new XElement(ns + "param", new XAttribute("name", "list")),
                             new XElement(ns + "param", new XAttribute("name", "view")),
                             new XElement(ns + "param", new XAttribute("name", "lang"))
                             );

            var tmplElement = xsltDoc.Root.Element(ns + "template");
            var listElement = new XElement("ul", new XAttribute("class", "d-view-list"));

            tmplElement.Add(listElement);
            var rowTmpl        = XElement.Parse(text);
            var forEachElement = new XElement(ns + "for-each",
                                              new XAttribute("select", @"//rows/row"), new XElement("li", new XAttribute("class", "d-view-item"), rowTmpl));

            listElement.Add(forEachElement);

            rowTmpl.DescendantsAndSelf()
            .Where(f => f.Attribute("data-field") != null)
            .ToList()
            .AsParallel()
            .ForAll(e =>
            {
                var fieldName  = e.Attribute("data-field").Value;
                var linkToItem = e.BoolAttr("data-link");
                var inline     = e.BoolAttr("data-line");
                var fieldType  = e.Attribute("data-type").Value;

                var showLabel = !e.BoolAttr("data-label-hidden");
                //label=e.Element("label")
                //e.ReplaceWith(new XElement(ns + "value-of", new XAttribute("select", fieldName)));
                var applyTemplate = new XElement(ns + "apply-templates", new XAttribute("select", fieldName));

                var fieldTmpl     = new XElement(ns + "template", new XAttribute("match", fieldName));
                XElement linkTmpl = null;
                if (linkToItem)
                {
                    linkTmpl = new XElement(ns + "element", new XAttribute("name", "a"),
                                            new XElement(ns + "attribute", new XAttribute("name", "href"), new XElement(ns + "value-of", new XAttribute("select", "concat($appPath,'/',$web,'/',$lang,'/lists/',$list,'/items/',../@Slug,'.html')"))));
                }

                XElement fieldContentTmpl = null;

                if (fieldType == "image")
                {
                    fieldContentTmpl = new XElement(ns + "element", new XAttribute("name", "img"),
                                                    new XElement(ns + "attribute", new XAttribute("name", "src"),
                                                                 new XElement(ns + "value-of", new XAttribute("select", ".")))
                                                    );
                }
                else
                {
                    fieldContentTmpl = new XElement(ns + "element", new XAttribute("name", inline ? "span" : "div"),
                                                    new XElement(ns + "value-of", new XAttribute("select", ".")));
                }

                if (inline)
                {
                    fieldContentTmpl.Add(new XAttribute("class", "d-inline"));
                }

                if (linkTmpl != null)
                {
                    linkTmpl.Add(fieldContentTmpl);
                    fieldTmpl.Add(linkTmpl);
                }
                else
                {
                    fieldTmpl.Add(fieldContentTmpl);
                }

                xsltDoc.Root.Add(fieldTmpl);
                //new template
                //e.ReplaceWith(applyTemplate);
                e.Add(applyTemplate);
            });

            //return xsltDoc.ToString();
            var result = new ContentTemplate()
            {
                ContentType = this.ContentType,
                Text        = xsltDoc.ToString()
            };

            view.BodyTemplateXml = result.ToXml();
        }