public void NestedDictionaryWithSegmentLiteral()
        {
            var source = "{{dictionary.[my key].[another key]}}";

            var template = new HandlebarsEngine().Compile(source);

            var data = new
            {
                dictionary =
                    new Dictionary <string, Dictionary <string, string> >()
                {
                    { "my key", new Dictionary <string, string>()
                      {
                          { "another key", "Hello Dictionary!" }
                      } }
                }
            };

            var result = template.Render(data);

            var expectedResult =
                "Hello Dictionary!";

            Assert.Equal(expectedResult, result);
        }
Ejemplo n.º 2
0
        private string GenerateOutputDetail(Page page, TemplateManifest templateManifest, TemplateFiles files, JToken dataJson, string settingsJson)
        {
            // detail template
            var templateVirtualFolder = templateManifest.ManifestFolderUri.UrlFolder;

            if (!string.IsNullOrEmpty(files.Template))
            {
                string  physicalTemplateFolder = HostingEnvironment.MapPath(templateVirtualFolder);
                FileUri templateUri            = CheckFiles(templateManifest, files);

                if (dataJson != null)
                {
                    var mf = new ModelFactorySingle(_renderinfo.Data, settingsJson, physicalTemplateFolder, _renderinfo.Template.Manifest, _renderinfo.Template, files, _module, PortalSettings.Current);
                    mf.Detail = true;
                    object model;
                    if (templateUri.Extension != ".hbs") // razor
                    {
                        model = mf.GetModelAsDynamic();
                    }
                    else // handlebars
                    {
                        if (OpenContentControllerFactory.Instance.OpenContentGlobalSettingsController.GetFastHandlebars())
                        {
                            model = mf.GetModelAsDictionary();
                        }
                        else
                        {
                            model = mf.GetModelAsDynamic();
                        }
                    }
                    if (!string.IsNullOrEmpty(_renderinfo.Template.Manifest.DetailMetaTitle))
                    {
                        HandlebarsEngine hbEngine = new HandlebarsEngine();
                        //page.Title
                        MetaTitle = hbEngine.Execute(_renderinfo.Template.Manifest.DetailMetaTitle, model);
                    }
                    if (!string.IsNullOrEmpty(_renderinfo.Template.Manifest.DetailMetaDescription))
                    {
                        HandlebarsEngine hbEngine = new HandlebarsEngine();
                        //PageUtils.SetPageDescription(page, hbEngine.Execute(_renderinfo.Template.Manifest.DetailMetaDescription, model));
                        MetaDescription = hbEngine.Execute(_renderinfo.Template.Manifest.DetailMetaDescription, model);
                    }
                    if (!string.IsNullOrEmpty(_renderinfo.Template.Manifest.DetailMeta))
                    {
                        HandlebarsEngine hbEngine = new HandlebarsEngine();
                        //PageUtils.SetPageMeta(page, hbEngine.Execute(_renderinfo.Template.Manifest.DetailMeta, model));
                        MetaOther = hbEngine.Execute(_renderinfo.Template.Manifest.DetailMeta, model);
                    }
                    return(ExecuteTemplate(page, templateManifest, files, templateUri, model));
                }
                else
                {
                    return("");
                }
            }
            else
            {
                return("");
            }
        }
        public void BasicDictionary()
        {
            var source =
                "<div id='userInfo'>UserName: {{userInfo.userName}} Language: {{userInfo.language}}</div>"
                + "<div id='main' style='width:{{clientSettings.width}}px; height:{{clientSettings.height}}px'>body</div>";

            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);

            var embeded = new Dictionary <string, object>
            {
                {
                    "userInfo", new
                    {
                        userName = "******",
                        language = "Slovak"
                    }
                },
                {
                    "clientSettings", new
                    {
                        width  = 120,
                        height = 80
                    }
                }
            };

            var result         = template.Render(embeded);
            var expectedResult =
                "<div id='userInfo'>UserName: Ondrej Language: Slovak</div>"
                + "<div id='main' style='width:120px; height:80px'>body</div>";

            Assert.Equal(expectedResult, result);
        }
        public void AssertHandlebarsUndefinedBindingException()
        {
            var source = "Hello, {{person.firstname}} {{person.lastname}}!";

            var config = new HandlebarsConfiguration
            {
                ThrowOnUnresolvedBindingExpression = true
            };
            var handlebars = new HandlebarsEngine(config);
            var template   = handlebars.Compile(source);

            var data = new
            {
                person = new
                {
                    firstname = "Erik"
                }
            };

            try
            {
                template.Render(data);
            }
            catch (HandlebarsUndefinedBindingException ex)
            {
                Assert.Equal("person.lastname", ex.Path);
                Assert.Equal("lastname", ex.MissingKey);
                return;
            }

            Assert.False(true, "Exception is expected.");
        }
Ejemplo n.º 5
0
        public void HelperWithSegmentLiteralArguments()
        {
            var engine = new HandlebarsEngine();

            engine.RegisterHelper("myHelper", (writer, context, args) => {
                var count = 0;
                foreach (var arg in args)
                {
                    writer.Write("\nThing {0}: {1}", ++count, arg);
                }
            });

            var source = "Here are some things: {{myHelper args.[0].arg args.[1].arg 'another argument'}}";

            var template = engine.Compile(source);

            var data = new
            {
                args = new[] { new { arg = "foo" }, new { arg = "bar" } }
            };

            var output = template.Render(data);

            var expected = "Here are some things: \nThing 1: foo\nThing 2: bar\nThing 3: another argument";

            Assert.Equal(expected, output);
        }
Ejemplo n.º 6
0
        public void JavaScriptSerializer()
        {
            // article
            string        dataJson  = "{\r\n  \"Category\": \"b1f2b3b4-c0f8-4c35-b81d-6bc08c023f48\",\r\n  \"Title\": \"Flex slider\",\r\n  \"Summary\": \"\\n\\nAn awesome, fully responsive jQuery slider toolkit.\\n\\n<br>Slider &amp; Carousel (1 of the 2 or both)<br>\",\r\n  \"Description\": \"\\n\\n<p>An awesome, fully responsive jQuery slider toolkit.</p><ul><li>Simple, semantic markup</li><li>Supported in all major browsers</li><li>Horizontal/vertical slide and fade animations</li><li>Multiple slider support, Callback API, and more</li><li>Hardware accelerated touch swipe support</li><li>Custom navigation options</li><li>Compatible with the latest version of jQuery</li></ul>Slider &amp; Carousel (1 of the 2 or both)<br><b>More info</b>: <a rel=\\\"nofollow\\\" target=\\\"_blank\\\" href=\\\"http://www.woothemes.com/flexslider/\\\">http://www.woothemes.com/flexslider/</a><br><b>Requirements</b>: OpenContent 1.2 or higher\\n\\n\\n<br>\",\r\n  \"Image\": \"/Portals/0/OpenContent/Files/691/flexslider.JPG\",\r\n  \"Gallery\": [\r\n    {\r\n      \"Image\": \"/Portals/0/OpenContent/Files/691/Chrysanthemum.jpg\"\r\n    },\r\n    {\r\n      \"Image\": \"/Portals/0/OpenContent/Files/691/Desert.jpg\"\r\n    },\r\n    {\r\n      \"Image\": \"/Portals/0/OpenContent/Files/691/Hydrangeas.jpg\"\r\n    },\r\n    {\r\n      \"Image\": \"/Portals/0/OpenContent/Files/691/Jellyfish.jpg\"\r\n    },\r\n    {\r\n      \"Image\": \"/Portals/0/OpenContent/Files/691/Koala.jpg\"\r\n    },\r\n    {\r\n      \"Image\": \"/Portals/0/OpenContent/Files/691/Penguins.jpg\"\r\n    },\r\n    {\r\n      \"Image\": \"/Portals/0/OpenContent/Files/691/Tulips.jpg\"\r\n    }\r\n  ],\r\n  \"Documents\": [],\r\n  \"Seo\": {\r\n    \"Slug\": \"Flex slider\",\r\n    \"MetaTitle\": \"Flex slider Template for DNN Open Content | Open Extensions\"\r\n  },\r\n  \"Tags\": [\r\n    \"502ec9fb-33f5-4c3f-ba4a-5c8defbeaf57\"\r\n  ],\r\n  \"Featured\": false,\r\n  \"publishstartdate\": \"2016-01-26T00:00:00+01:00\",\r\n  \"publishenddate\": \"2099-12-31T00:00:00+01:00\",\r\n  \"publishstatus\": \"published\"\r\n}";
            StringBuilder data      = new StringBuilder("{ \"Items\": [");
            int           itemCount = 10;

            for (int i = 0; i < itemCount; i++)
            {
                data.Append(dataJson);
                if (i < itemCount - 1)
                {
                    data.Append(", ");
                }
            }
            data.Append("] }");

            dynamic expectedModel             = JsonUtils.JsonToDynamic(data.ToString());
            Dictionary <string, object> model = JsonUtils.JsonToDictionary(data.ToString());
            string           source           = "{{#each Items}}\r\n    <!-- item {{@index}} -->\r\n        <div class=\"row article\">\r\n            <div class=\"col-sm-12 col-md-12\">\r\n                <div class=\"row\">\r\n                    <div class=\"col-md-4\">\r\n                        <a href=\"{{Context.DetailUrl}}\"><img src=\"{{Image}}\" alt=\"\" title=\"\" class=\"img-thumbnail img-responsive\" /></a>\r\n                    </div>\r\n                    <div class=\"caption col-md-8\">\r\n                        <h3 class=\"title\"><a href=\"{{Context.DetailUrl}}\">{{Title}}</a></h3>\r\n                        <p class=\"desc\">{{{Summary}}}</p>\r\n                        <p><a href=\"{{Context.DetailUrl}}\" class=\"btn btn-default\" role=\"button\">Read more</a></p>\r\n                        <p class=\"theme\">\r\n                            <span class=\"fa fa-calendar\" aria-hidden=\"true\"></span>\r\n                            {{formatDateTime publishstartdate \"DD/MM/YYYY\"}}\r\n                            <span class=\"fa fa-tags\" aria-hidden=\"true\"></span>\r\n                            {{#if Category}}\r\n                            <span>{{Category.Title}}</span>\r\n                            {{/if}}\r\n                        </p>\r\n                    </div>\r\n                </div>\r\n               \r\n            </div>\r\n        </div>\r\n    </div>\r\n    {{/each}}";
            HandlebarsEngine hbEngine         = new HandlebarsEngine();
            string           expectedRes      = hbEngine.Execute(source, expectedModel);
            string           res = hbEngine.Execute(source, model);

            Assert.AreEqual(expectedRes, res);
        }
        public void TestNoWhitespaceBetweenExpressions()
        {
            var source = @"{{#is ProgramID """"}}no program{{/is}}{{#is ProgramID ""1081""}}some program text{{/is}}";

            var engine = new HandlebarsEngine();

            engine.RegisterHelper("is", (output, options, context, args) =>
            {
                if (args[0] == args[1])
                {
                    options.Template(output, context);
                }
            });


            var template = engine.Compile(source);

            var result = template.Render(new
            {
                ProgramID = "1081"
            });

            var expectedResult =
                "some program text";

            Assert.Equal(expectedResult, result);
        }
Ejemplo n.º 8
0
        public void BasicSubExpressionWithNumericLiteralArguments()
        {
            var helperName    = "helper-" + Guid.NewGuid();    //randomize helper name
            var subHelperName = "subhelper-" + Guid.NewGuid(); //randomize helper name
            var engine        = new HandlebarsEngine();

            engine.RegisterHelper(helperName, (writer, context, args) => {
                writer.Write("Math " + args[0]);
            });

            engine.RegisterHelper(subHelperName, (writer, context, args) => {
                args = args.Select(a => (object)int.Parse((string)a)).ToArray();
                writer.Write((int)args[0] + (int)args[1]);
            });

            var source = "{{" + helperName + " (" + subHelperName + " 1 2)}}";

            var template = engine.Compile(source);

            var output = template.Render(new { });

            var expected = "Math 3";

            Assert.Equal(expected, output);
        }
Ejemplo n.º 9
0
        public void BasicBlockPartialWithArgument()
        {
            string source = "Hello, {{#>person2 arg='Todd'}}friend{{/person2}}!";

            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);

            var data = new {
                firstName = "Pete",
                lastName  = "Jones"
            };

            var result1 = template.Render(data);

            Assert.Equal("Hello, friend!", result1);

            var partialSource = "{{arg}}";

            using (var reader = new StringReader(partialSource)) {
                var partialTemplate = engine.Compile(reader);
                engine.RegisterTemplate("person2", partialTemplate);
            }

            var result2 = template.Render(data);

            Assert.Equal("Hello, Todd!", result2);
        }
Ejemplo n.º 10
0
        public void DynamicPartialWithParameters()
        {
            var source = "Hello, {{> (lookup name) first='Marc' last='Smith' }}!";

            var engine = new HandlebarsEngine();

            engine.RegisterHelper("lookup", (output, context, arguments) =>
            {
                output.WriteSafeString(arguments[0]);
            });

            var template = engine.Compile(source);

            using (var reader = new StringReader("{{first}} {{last}}"))
            {
                var partialTemplate = engine.Compile(reader);
                engine.RegisterTemplate("test", partialTemplate);
            }

            var data = new
            {
                name = "test"
            };

            var result = template.Render(data);

            Assert.Equal("Hello, Marc Smith!", result);
        }
Ejemplo n.º 11
0
        public void NestedSubExpressionsWithNumericLiteralArguments()
        {
            var writeHelper = "write-" + Guid.NewGuid(); //randomize helper name
            var addHelper   = "add-" + Guid.NewGuid();   //randomize helper name
            var engine      = new HandlebarsEngine();

            engine.RegisterHelper(writeHelper, (writer, context, args) => {
                writer.Write(args[0]);
            });

            engine.RegisterHelper(addHelper, (writer, context, args) => {
                args = args.Select(a => (object)int.Parse((string)a)).ToArray();
                writer.Write((int)args[0] + (int)args[1]);
            });

            var source = "{{" + writeHelper + " (" + addHelper + " (" + addHelper + " 1 2) 3 )}}";

            var template = engine.Compile(source);

            var output = template.Render(new { });

            var expected = "6";

            Assert.Equal(expected, output);
        }
Ejemplo n.º 12
0
        public void StandaloneEach()
        {
            var source   = "Links:\n {{#each nav}}\n  <a href=\"{{url}}\">\n    {{#if test}}\n    {{title}}\n    {{else}}\n    Empty\n    {{/if}}\n  </a>\n  {{/each}}";
            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);
            var data     = new
            {
                nav = new[]
                {
                    new
                    {
                        url   = "https://google.com",
                        test  = true,
                        title = "Google"
                    },
                    new
                    {
                        url   = "https://bing.com",
                        test  = false,
                        title = "Bing"
                    }
                }
            };
            var result = template.Render(data);

            Assert.Equal("Links:\n  <a href=\"https://google.com\">\n    Google\n  </a>\n  <a href=\"https://bing.com\">\n    Empty\n  </a>\n", result);
        }
Ejemplo n.º 13
0
        public void BasicPartialWithContextAndStringParameters()
        {
            string source = "Hello, {{>person first=leadDev.marc last='Smith'}}!";

            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);

            var data = new
            {
                leadDev = new
                {
                    marc = new
                    {
                        name = "Marc"
                    }
                }
            };

            var partialSource = "{{first.name}} {{last}}";

            using (var reader = new StringReader(partialSource))
            {
                var partialTemplate = engine.Compile(reader);
                engine.RegisterTemplate("person", partialTemplate);
            }

            var result = template.Render(data);

            Assert.Equal("Hello, Marc Smith!", result);
        }
Ejemplo n.º 14
0
        public void ComplexTest()
        {
            var source =
                @"{{#each nav ~}}
  <a href=""{{url}}"">
    {{~#if test}}
      {{~title}}
    {{~else~}}
      Empty
    {{~/if~}}
  </a>
{{~/each}}";
            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);
            var data     = new {
                nav = new [] {
                    new {
                        url   = "https://google.com",
                        test  = true,
                        title = "Google"
                    },
                    new {
                        url   = "https://bing.com",
                        test  = false,
                        title = "Bing"
                    }
                }
            };
            var result = template.Render(data);

            Assert.Equal(@"<a href=""https://google.com"">Google</a><a href=""https://bing.com"">Empty</a>", result);
        }
Ejemplo n.º 15
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            string Template = ModuleContext.Settings["template"] as string;

            if (!Page.IsPostBack)
            {
                InitForm(Template);
            }
            else
            {
                if (Request.QueryString["result"] == "submit")
                {
                    /*
                     * int id = int.Parse(Request.QueryString["result"]);
                     * OpenFormController ctrl =new OpenFormController();
                     * var content = ctrl.GetContent(id, ModuleId);
                     */
                    string json = hfOpenForm.Value;
                    phForm.Visible   = false;
                    phResult.Visible = true;
                    string  formData = "";
                    dynamic data     = OpenFormUtils.GenerateFormData(json, out formData);

                    string      jsonSettings = Settings["data"] as string;
                    SettingsDTO settings     = JsonConvert.DeserializeObject <SettingsDTO>(jsonSettings);
                    if (settings != null && settings.Settings != null)
                    {
                        HandlebarsEngine hbs = new HandlebarsEngine();
                        lMessage.Text  = hbs.Execute(settings.Settings.Message, data);
                        lTracking.Text = settings.Settings.Tracking;
                    }
                }
            }
        }
Ejemplo n.º 16
0
        public void BlockHelperHelper()
        {
            var source = "{{#block_helper foo}}{{link_to url text}}{{/block_helper}}";

            var data = new {
                foo = new []
                {
                    new { text = "Google", url = "http://google.com/" },
                    new { text = "Yahoo!", url = "http://yahoo.com/" }
                }
            };

            var engine = new HandlebarsEngine();

            engine.RegisterHelper("link_to", (writer, context, parameters) => {
                writer.WriteSafeString("<a href='" + parameters[0] + "'>" + parameters[1] + "</a>");
            });

            engine.RegisterHelper("block_helper", (writer, options, context, arguments) => {
                foreach (var item in (IEnumerable)arguments[0])
                {
                    options.Template(writer, item);
                }
            });

            var template = engine.Compile(source);

            var result = template.Render(data);

            Assert.Equal("<a href='http://google.com/'>Google</a><a href='http://yahoo.com/'>Yahoo!</a>", result);
        }
Ejemplo n.º 17
0
        private string ExecuteTemplate(Page page, TemplateManifest templateManifest, TemplateFiles files, FileUri templateUri, object model)
        {
            var       templateVirtualFolder = templateManifest.ManifestFolderUri.UrlFolder;
            string    output;
            Stopwatch stopwatch = null;

            if (LogContext.IsLogActive)
            {
                var logKey = "Render template";
                LogContext.Log(_module.ViewModule.ModuleID, logKey, "template", templateUri.FilePath);
                LogContext.Log(_module.ViewModule.ModuleID, logKey, "model", model);
                stopwatch = new Stopwatch();
                stopwatch.Start();
            }
            if (templateUri.Extension != ".hbs")
            {
                output = ExecuteRazor(templateUri, model);
            }
            else
            {
                HandlebarsEngine hbEngine = new HandlebarsEngine();
                output = hbEngine.Execute(page, files, templateVirtualFolder, model);
            }
            if (stopwatch != null)
            {
                stopwatch.Stop();
                var logKey = "Render template";
                LogContext.Log(_module.ViewModule.ModuleID, logKey, "render time (ms)", stopwatch.ElapsedMilliseconds);
                stopwatch.Stop();
            }
            return(output);
        }
Ejemplo n.º 18
0
        public void BasicPartialWithStringParametersAndImplicitContext()
        {
            string source = "Hello, {{>person lastName='Smith'}}!";

            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);

            var data = new
            {
                firstName = "Marc",
                lastName  = "Jones"
            };

            var partialSource = "{{firstName}} {{lastName}}";

            using (var reader = new StringReader(partialSource))
            {
                var partialTemplate = engine.Compile(reader);
                engine.RegisterTemplate("person", partialTemplate);
            }

            var result = template.Render(data);

            Assert.Equal("Hello, Marc Smith!", result);
        }
Ejemplo n.º 19
0
        public void BasicSubExpressionWithPathArgument()
        {
            var helperName    = "helper-" + Guid.NewGuid();    //randomize helper name
            var subHelperName = "subhelper-" + Guid.NewGuid(); //randomize helper name
            var engine        = new HandlebarsEngine();

            engine.RegisterHelper(helperName, (writer, context, args) => {
                writer.Write("Outer " + args[0]);
            });

            engine.RegisterHelper(subHelperName, (writer, context, args) => {
                writer.Write("Inner " + args[0]);
            });

            var source = "{{" + helperName + " (" + subHelperName + " property)}}";

            var template = engine.Compile(source);

            var output = template.Render(new {
                property = "inner-arg"
            });

            var expected = "Outer Inner inner-arg";

            Assert.Equal(expected, output);
        }
Ejemplo n.º 20
0
        public void BasicPartialWithIncompleteChildContextDoesNotFallback()
        {
            string source = "Hello, {{>person leadDev}}!";

            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);

            var data = new
            {
                firstName = "Pete",
                lastName  = "Jones",
                leadDev   = new
                {
                    firstName = "Marc"
                }
            };

            var partialSource = "{{firstName}} {{lastName}}";

            using (var reader = new StringReader(partialSource))
            {
                var partialTemplate = engine.Compile(reader);
                engine.RegisterTemplate("person", partialTemplate);
            }

            var result = template.Render(data);

            Assert.Equal("Hello, Marc !", result);
        }
Ejemplo n.º 21
0
        public void BasicSubExpressionWithHashArgument()
        {
            var helperName    = "helper-" + Guid.NewGuid();    //randomize helper name
            var subHelperName = "subhelper-" + Guid.NewGuid(); //randomize helper name
            var engine        = new HandlebarsEngine();

            engine.RegisterHelper(helperName, (writer, context, args) => {
                writer.Write("Outer " + args[0]);
            });

            engine.RegisterHelper(subHelperName, (writer, context, args) => {
                var hash = (Dictionary <string, object>)args[0];
                writer.Write("Inner " + hash["item1"] + "-" + hash["item2"]);
            });

            var source = "{{" + helperName + " (" + subHelperName + " item1='inner' item2='arg')}}";

            var template = engine.Compile(source);

            var output = template.Render(new { });

            var expected = "Outer Inner inner-arg";

            Assert.Equal(expected, output);
        }
Ejemplo n.º 22
0
        public void BasicPartialWithContext()
        {
            string source = "Hello, {{>person leadDev}}!";

            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);

            var data = new {
                leadDev = new {
                    name = "Marc"
                }
            };

            var partialSource = "{{name}}";

            using (var reader = new StringReader(partialSource))
            {
                var partialTemplate = engine.Compile(reader);
                engine.RegisterTemplate("person", partialTemplate);
            }

            var result = template.Render(data);

            Assert.Equal("Hello, Marc!", result);
        }
Ejemplo n.º 23
0
        private string GenerateOutputSingle(Page page, FileUri template, JToken dataJson, string settingsJson, TemplateFiles files)
        {
            if (template != null)
            {
                if (dataJson != null)
                {
                    ModelFactorySingle mf;

                    if (_renderinfo.Data == null)
                    {
                        // demo data
                        mf = new ModelFactorySingle(_renderinfo.DataJson, settingsJson, _renderinfo.Template.Manifest, _renderinfo.Template, files, _module);
                    }
                    else
                    {
                        mf = new ModelFactorySingle(_renderinfo.Data, settingsJson, _renderinfo.Template.Manifest, _renderinfo.Template, files, _module);
                    }
                    if (template.Extension != ".hbs") // razor
                    {
                        dynamic model = mf.GetModelAsDynamic();
                        if (LogContext.IsLogActive)
                        {
                            var logKey = "Render single item template";
                            LogContext.Log(_module.ViewModule.ModuleId, logKey, "template", template.FilePath);
                            LogContext.Log(_module.ViewModule.ModuleId, logKey, "model", model);
                        }
                        return(ExecuteRazor(template, model));
                    }
                    else // handlebars
                    {
                        object model;
                        if (!App.Services.CreateGlobalSettingsRepository(PortalSettings.Current.PortalId).GetLegacyHandlebars())
                        {
                            model = mf.GetModelAsDictionary();
                        }
                        else
                        {
                            model = mf.GetModelAsDynamic();
                        }
                        if (LogContext.IsLogActive)
                        {
                            var logKey = "Render single item template";
                            LogContext.Log(_module.ViewModule.ModuleId, logKey, "template", template.FilePath);
                            LogContext.Log(_module.ViewModule.ModuleId, logKey, "model", model);
                        }
                        HandlebarsEngine hbEngine = new HandlebarsEngine();
                        return(hbEngine.Execute(page, template, model));
                    }
                }
                else
                {
                    return("");
                }
            }
            else
            {
                return("");
            }
        }
Ejemplo n.º 24
0
        public void BasicDeferredBlockNegatedContext()
        {
            var engine   = new HandlebarsEngine();
            var template = engine.Compile("Hello, {{^obj}}{{name}}{{/obj}}!");

            Assert.Equal("Hello, nobody!", template.Render(new { name = "nobody" }));
            Assert.Equal("Hello, nobody!", template.Render(new { name = "nobody", obj = new string[0] }));
        }
Ejemplo n.º 25
0
 public void TestNonClosingBlockExpressionException()
 {
     Assert.Throws <HandlebarsCompilerException>(() =>
     {
         var engine = new HandlebarsEngine();
         engine.Compile("{{#if 0}}test").Render(new { });
     });
 }
Ejemplo n.º 26
0
        public void BasicDeferredBlockInversion()
        {
            var engine   = new HandlebarsEngine();
            var template = engine.Compile("Hello, {{#obj}}somebody{{else}}{{name}}{{/obj}}!");

            Assert.Equal("Hello, nobody!", template.Render(new { name = "nobody" }));
            Assert.Equal("Hello, nobody!", template.Render(new { name = "nobody", obj = false }));
            Assert.Equal("Hello, nobody!", template.Render(new { name = "nobody", obj = new string[0] }));
        }
Ejemplo n.º 27
0
        private string GenerateOutputDetail(Page page, TemplateManifest templateManifest, TemplateFiles files, JToken dataJson, string settingsJson)
        {
            // detail template
            if (!string.IsNullOrEmpty(files.Template))
            {
                FileUri templateUri = CheckFiles(templateManifest, files);

                if (dataJson != null)
                {
                    var mf = new ModelFactorySingle(_renderinfo.Data, settingsJson, _renderinfo.Template.Manifest, _renderinfo.Template, files, _module);
                    mf.Detail = true;
                    object model;
                    if (templateUri.Extension != ".hbs") // razor
                    {
                        model = mf.GetModelAsDynamic();
                    }
                    else // handlebars
                    {
                        if (!App.Services.CreateGlobalSettingsRepository(PortalSettings.Current.PortalId).GetLegacyHandlebars())
                        {
                            model = mf.GetModelAsDictionary();
                        }
                        else
                        {
                            model = mf.GetModelAsDynamic();
                        }
                    }
                    if (!string.IsNullOrEmpty(_renderinfo.Template.Manifest.DetailMetaTitle))
                    {
                        HandlebarsEngine hbEngine = new HandlebarsEngine();
                        //page.Title
                        MetaTitle = hbEngine.Execute(_renderinfo.Template.Manifest.DetailMetaTitle, model);
                    }
                    if (!string.IsNullOrEmpty(_renderinfo.Template.Manifest.DetailMetaDescription))
                    {
                        HandlebarsEngine hbEngine = new HandlebarsEngine();
                        //PageUtils.SetPageDescription(page, hbEngine.Execute(_renderinfo.Template.Manifest.DetailMetaDescription, model));
                        MetaDescription = hbEngine.Execute(_renderinfo.Template.Manifest.DetailMetaDescription, model);
                    }
                    if (!string.IsNullOrEmpty(_renderinfo.Template.Manifest.DetailMeta))
                    {
                        HandlebarsEngine hbEngine = new HandlebarsEngine();
                        //PageUtils.SetPageMeta(page, hbEngine.Execute(_renderinfo.Template.Manifest.DetailMeta, model));
                        MetaOther = hbEngine.Execute(_renderinfo.Template.Manifest.DetailMeta, model);
                    }
                    return(ExecuteTemplate(page, templateManifest, files, templateUri, model));
                }
                else
                {
                    return("");
                }
            }
            else
            {
                return("");
            }
        }
Ejemplo n.º 28
0
        public void InversionNoKey()
        {
            var source   = "{{^key}}No key!{{/key}}";
            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);
            var output   = template.Render(new { });
            var expected = "No key!";

            Assert.Equal(expected, output);
        }
Ejemplo n.º 29
0
        public void BasicWithInversion()
        {
            var source   = "Hello, {{#with person}} my good friend{{else}}nevermind{{/with}}";
            var engine   = new HandlebarsEngine();
            var template = engine.Compile(source);

            Assert.Equal("Hello, nevermind", template.Render(new {}));
            Assert.Equal("Hello, nevermind", template.Render(new { person = false }));
            Assert.Equal("Hello, nevermind", template.Render(new { person = new string[] {} }));
        }
Ejemplo n.º 30
0
        public void MultiplyHelper()
        {
            string           expected = "50";
            string           source   = "{{multiply data \"5\"}}";
            dynamic          model    = new { data = 10 };
            HandlebarsEngine hbEngine = new HandlebarsEngine();
            string           res      = hbEngine.Execute(source, model);

            Assert.AreEqual(expected, res);
        }