---
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

title: The ${project_name} Blog
in_menu: false
sort_info: 7

--- name:head pipeline:ssp
<link rel="alternate" title="${project_name} RSS" href="index.rss" type="application/rss+xml">

--- name:overview

The latest and greatest news from the ${project_name} team

--- name:blog pipeline:jade

:ssp
  <h1>${project_name} Blog <a href="index.rss"><img src="${uri("/images/rss.gif")}"/></a></h1>

- import org.fusesource.scalate.page.BlogHelper._
- for(post <- posts)
  .post
    a(href={post.link})
      h2= post.title
    .details Posted by #{post.author} on #{post.createdAt}
    !~~ post.render()