예제 #1
0
  private void renderPage(
      final HttpServletRequest req,
      String reqPagePath,
      HttpServletResponse res,
      Site site,
      Page page,
      String[] requestContext)
      throws PebbleException, IOException {

    TemplateContext global = new TemplateContext();
    global.setRequestContext(requestContext);
    for (String key : req.getParameterMap().keySet()) {
      global.put(key, req.getParameter(key));
    }

    global.put("page", makePageWrapper(page));
    populateSiteInfo(req, page, site, global);

    List<TemplateContext> components = new ArrayList<TemplateContext>();

    for (Component component : page.getComponentsSet()) {
      TemplateContext local = new TemplateContext();
      component.handle(page, local, global);
      components.add(local);
    }

    global.put("components", components);

    PebbleTemplate compiledTemplate =
        engine.getTemplate(site.getTheme().getType() + "/" + page.getTemplate().getFilePath());

    res.setStatus(200);
    res.setContentType("text/html");
    compiledTemplate.evaluate(res.getWriter(), global);
  }
예제 #2
0
 @Test
 public void testEscapeCharactersText() throws PebbleException, IOException {
   PebbleTemplate template = pebble.getTemplate("template.escapeCharactersInText.peb");
   Map<String, Object> context = new HashMap<>();
   Writer writer = new StringWriter();
   template.evaluate(writer, context);
 }
예제 #3
0
  @Test(expected = ParserException.class)
  public void testStringWithDifferentQuotationMarks() throws PebbleException, IOException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    PebbleTemplate template = pebble.getTemplate("{{'test\"}}");

    Writer writer = new StringWriter();
    template.evaluate(writer);
    assertEquals("test", writer.toString());
  }
예제 #4
0
  @Test
  public void testStringConstantWithLinebreak() throws PebbleException, IOException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    PebbleTemplate template = pebble.getTemplate("{{ 'test\ntest' }}");

    Writer writer = new StringWriter();
    template.evaluate(writer);
    assertEquals("test\ntest", writer.toString());
  }
예제 #5
0
  @Test
  public void testExpressionInArguments() throws PebbleException, IOException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    PebbleTemplate template =
        pebble.getTemplate("{{ input(1 + 1) }}{% macro input(value) %}{{value}}{% endmacro %}");

    Writer writer = new StringWriter();
    template.evaluate(writer);
    assertEquals("2", writer.toString());
  }
예제 #6
0
  @Test
  public void testSingleQuoteWithinDoubleQuotes() throws PebbleException, IOException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    PebbleTemplate template = pebble.getTemplate("{{\"te'st\"}}");

    Writer writer = new StringWriter();
    template.evaluate(writer);
    assertEquals("te'st", writer.toString());

    template = pebble.getTemplate("{{\"te\\'st\"}}");
    writer = new StringWriter();
    template.evaluate(writer);
    assertEquals("te\\'st", writer.toString());

    template = pebble.getTemplate("{{'te\\'st'}}");
    writer = new StringWriter();
    template.evaluate(writer);
    assertEquals("te'st", writer.toString());
  }
예제 #7
0
  @Test
  public void testAttributeNamePrefixedWithOperatorName() throws PebbleException, IOException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    PebbleTemplate template = pebble.getTemplate("{{ foo.org }}");
    Map<String, Object> context = new HashMap<>();
    context.put("foo", new Foo("success"));
    Writer writer = new StringWriter();
    template.evaluate(writer, context);
    assertEquals("success", writer.toString());
  }
예제 #8
0
  @Test(expected = PebbleException.class)
  public void testIncorrectlyNamedArgument() throws PebbleException, IOException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    PebbleTemplate template =
        pebble.getTemplate(
            "{{ 'This is a test of the abbreviate filter' | abbreviate(WRONG=16) }}");

    Writer writer = new StringWriter();
    template.evaluate(writer);
    assertEquals("This is a tes...", writer.toString());
  }
예제 #9
0
  @Test
  public void testVariableNamePrefixedWithOperatorName() throws PebbleException, IOException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    PebbleTemplate template =
        pebble.getTemplate(
            "{{ organization }} {{ nothing }} {{ andy }} {{ equalsy }} {{ istanbul }}");
    Map<String, Object> context = new HashMap<>();
    context.put("organization", "organization");
    context.put("nothing", "nothing");
    context.put("andy", "andy");
    context.put("equalsy", "equalsy");
    context.put("istanbul", "istanbul");
    Writer writer = new StringWriter();
    template.evaluate(writer, context);
    assertEquals("organization nothing andy equalsy istanbul", writer.toString());
  }
예제 #10
0
  @Test(expected = PebbleException.class)
  public void testPositionalArgumentAfterNamedArguments()
      throws PebbleException, IOException, ParseException {
    Loader loader = new StringLoader();
    PebbleEngine pebble = new PebbleEngine(loader);

    String source = "{{ stringDate | date(existingFormat='yyyy-MMMM-d', 'yyyy/MMMM/d') }}";

    PebbleTemplate template = pebble.getTemplate(source);
    Map<String, Object> context = new HashMap<>();
    DateFormat format = new SimpleDateFormat("yyyy-MMMM-d");
    Date realDate = format.parse("2012-July-01");
    context.put("stringDate", format.format(realDate));

    Writer writer = new StringWriter();
    template.evaluate(writer, context);
    assertEquals("2012/July/1", writer.toString());
  }
예제 #11
0
 private void errorPage(
     final HttpServletRequest req, HttpServletResponse res, Site site, int errorCode)
     throws ServletException, IOException {
   CMSTheme cmsTheme = site.getTheme();
   if (cmsTheme != null && cmsTheme.definesPath(errorCode + ".html")) {
     try {
       PebbleTemplate compiledTemplate =
           engine.getTemplate(cmsTheme.getType() + "/" + errorCode + ".html");
       TemplateContext global = new TemplateContext();
       populateSiteInfo(req, null, site, global);
       res.setStatus(errorCode);
       res.setContentType("text/html");
       compiledTemplate.evaluate(res.getWriter(), global);
     } catch (PebbleException e) {
       throw new ServletException("Could not render error page for " + errorCode);
     }
   } else {
     res.sendError(errorCode, req.getRequestURI());
   }
 }
예제 #12
0
 private void handleLeadingSlash(final HttpServletRequest req, HttpServletResponse res, Site sites)
     throws PebbleException, IOException, ServletException {
   if (req.getMethod().equals("GET")) {
     res.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
     res.setHeader("Location", rewritePageUrl(req));
     return;
   } else if (req.getMethod().equals("POST")) {
     if (CoreConfiguration.getConfiguration().developmentMode()) {
       PebbleEngine engine = new PebbleEngine(new StringLoader());
       engine.addExtension(new CMSExtensions());
       PebbleTemplate compiledTemplate =
           engine.getTemplate(
               "<html><head></head><body><h1>POST action with backslash</h1><b>You posting data with a URL with a backslash. Alter the form to post with the same URL without the backslash</body></html>");
       res.setStatus(500);
       res.setContentType("text/html");
       compiledTemplate.evaluate(res.getWriter());
     } else {
       errorPage(req, res, sites, 500);
     }
   }
 }