Author: fmeschbe
Date: Fri Dec 14 14:19:03 2012
New Revision: 1421880
URL: http://svn.apache.org/viewvc?rev=1421880&view=rev
Log:
FELIX-3816 Add site libraries and templates (copied from Sling and adapted)
Added:
felix/site/trunk/cgi-bin/
felix/site/trunk/readme.txt
felix/site/trunk/templates/downloads.html
felix/site/trunk/templates/sidenav.mdtext
Modified:
felix/site/trunk/lib/path.pm
felix/site/trunk/lib/view.pm
felix/site/trunk/templates/single_narrative.html
felix/site/trunk/templates/skeleton.html
Modified: felix/site/trunk/lib/path.pm
URL:
http://svn.apache.org/viewvc/felix/site/trunk/lib/path.pm?rev=1421880&r1=1421879&r2=1421880&view=diff
==============================================================================
--- felix/site/trunk/lib/path.pm (original)
+++ felix/site/trunk/lib/path.pm Fri Dec 14 14:19:03 2012
@@ -1,19 +1,19 @@
package path;
+use ASF::Value;
# taken from django's url.py
our @patterns = (
[qr!\.mdtext$!, single_narrative => { template =>
"single_narrative.html" }],
-
- [qr!/sitemap\.html$!, sitemap => { headers => { title => "Sitemap" }} ],
-
+ [qr!^/sitemap\.html$!, sitemap => { headers => { title => "Sling
Sitemap" }}],
+ [qr!^/downloads\.list$!, downloads => { template => "downloads.html" }],
) ;
# for specifying interdependencies between files
-our %dependencies = (
- "/sitemap.html" => [ grep s!^content!!, glob "content/*.mdtext" ],
-);
+#our %dependencies = (
+# "/sling/sitemap.html" => [ grep s!^content!!, glob
"content/sling/*.mdtext" ],
+#);
1;
Modified: felix/site/trunk/lib/view.pm
URL:
http://svn.apache.org/viewvc/felix/site/trunk/lib/view.pm?rev=1421880&r1=1421879&r2=1421880&view=diff
==============================================================================
--- felix/site/trunk/lib/view.pm (original)
+++ felix/site/trunk/lib/view.pm Fri Dec 14 14:19:03 2012
@@ -1,8 +1,401 @@
package view;
-use base 'ASF::View'; # see
https://svn.apache.org/repos/infra/websites/cms/build/lib/ASF/View.pm
+
+#
+# BUILD CONSTRAINT: all views must return $content, $extension.
+# additional return values (as seen below) are optional. However,
+# careful use of symlinks and dependency management in path.pm can
+# resolve most issues with this constraint.
+#
+
+use strict;
+use warnings;
+use Dotiac::DTL qw/Template/;
+use Dotiac::DTL::Addon::markup;
+use ASF::Util qw/read_text_file shuffle/;
+use File::Temp qw/tempfile/;
+use LWP::Simple;
+use SVN::Client;
+use File::Find;
+
+push @Dotiac::DTL::TEMPLATE_DIRS, "templates";
+
+# This is most widely used view. It takes a
+# 'template' argument and a 'path' argument.
+# Assuming the path ends in foo.mdtext, any files
+# like foo/bar.mdtext will be parsed and
+# passed to the template in the "bar" (hash)
+# variable.
+
+sub single_narrative {
+ my %args = @_;
+ my $file = "content$args{path}";
+ my $template = $args{template};
+ $args{path} =~ s/\.mdtext$/\.html/;
+ $args{breadcrumbs} = breadcrumbs($args{path});
+ $args{svninfo} = svninfo($file);
+
+ read_text_file $file, \%args;
+
+ $args{refs} = {};
+
+ # ensure loading child pages
+ my $page_path = $file;
+ $page_path =~ s/\.[^.]+$//;
+ if (-d $page_path) {
+ $args{children} = {};
+ for my $f (grep -f, glob "$page_path/*.mdtext") {
+ $f =~ m!/([^/]+)\.mdtext$! or die "Bad filename: $f\n";
+ $args{children}->{$1} = read_ref_page_data($f);
+ $args{refs}->{$1} = $args{children}->{$1};
+ }
+ }
+
+ # ensure loading pages referenced with ref.XXX.*
+ while( $args{content} =~ /refs\.([^.]+)\./g ) {
+ my $label = $1;
+ if(!$args{refs}->{$label}) {
+ my $refPagePath;
+ find(sub {
+ if(!$refPagePath && $_ eq "$label.mdtext") {
+ $refPagePath = $File::Find::name;
+ }
+ }, "content");
+
+ if($refPagePath) {
+ $args{refs}->{$label} = read_ref_page_data($refPagePath);
+ }
+ }
+ }
+
+# $args{sidenav} = {};
+# read_text_file "templates/sidenav.mdtext", $args{sidenav} ;
+
+# select STDOUT ;
+# $| = 1 ;
+# for my $ke (keys %args) {
+# print STDOUT "$ke \n";
+# }
+
+ # use the content as a template if it contains Django templates
+ if ($args{content} =~ /\{[{%][^}]*[%}]\}/) {
+ print STDOUT "Applying $args{path} as a Django template\n";
+ $args{content} = Dotiac::DTL->new(\$args{content})->render(\%args);
+ }
+
+ return Dotiac::DTL::Template($template)->render(\%args), html => \%args;
+}
+
+# The specially crafted download page
+# Input is a list of artifacts formatted as:
+#
+# <title>|<id>|<version>[|<qualifier>]
+#
+# Special handling if title is "sling": This denotes the
+# version of the Sling Launchpad distribution whie is
+# rendered specially: The id is actually the launchpad
+# distribution version
+sub downloads {
+ my %args = @_;
+ my $file = "content$args{path}";
+ my $template = $args{template};
+ $args{path} =~ s/\.list$/\.html/;
+ $args{breadcrumbs} = breadcrumbs($args{path});
+ $args{svninfo} = svninfo($file);
+
+ read_text_file $file, \%args;
+
+ my $result = "|Artifact | Version | Binary | Source|\n|--|--|--|--|\n";
+ my $maven = "|Artifact | Version | Binary | Source|\n|--|--|--|--|\n";
+ my $launchpad = "| Artifact | Version | Provides | Package |\n|-|-|-|-|\n";
+
+ my @lines = split( /\n/, $args{content} );
+ @lines = sort @lines;
+ for my $line (@lines) {
+ next if (!$line || $line =~ /^\s*#/);
+
+ my ($title, $artifact, $version, $classifier, $ext) = split(/\|/,
$line);
+ $ext = "jar" unless ($ext);
+ $classifier = ($classifier) ? "-$classifier" : "";
+
+ if ($title eq "sling") {
+
+ $launchpad .="| Sling Standalone Application | $artifact | A
self-runnable Sling jar. | " .
downloadLink("org.apache.sling.launchpad-$artifact-standalone.jar"). "|\n";
+ $launchpad .="| Sling Web Application | $artifact | A ready-to run
Sling webapp as a war file. | " .
downloadLink("org.apache.sling.launchpad-$artifact.war"). "|\n";
+ $launchpad .="| Sling Source Package | $artifact | The released
Sling source code. | " .
downloadLink("sling-$artifact-source-release.tar.gz")."<br/>" .
downloadLink("sling-$artifact-source-release.zip")." |\n";
+
+ } else {
+
+ my $target = \$result;
+ my $artifactLabel;
+ if ($ext eq "war") {
+ $artifactLabel = "Web Application";
+ } elsif ($classifier eq "-app") {
+ $artifactLabel = "Java Application";
+ } elsif ($artifact =~/^maven-/) {
+ $target = \$maven;
+ $artifactLabel = "Maven Plugin";
+ } else {
+ $artifactLabel = "Bundle";
+ }
+
+ ${$target} .= "|$title|$version|" .
downloadLink("$artifact-$version$classifier.$ext", $artifactLabel) . " | " .
downloadLink("$artifact-$version-source-release.zip", "Source ZIP") . "|\n";
+ }
+ }
+
+ $args{launchpad} = $launchpad;
+ $args{content} = $result;
+ $args{maven} = $maven;
+
+ return Dotiac::DTL::Template($template)->render(\%args), html => \%args;
+}
+
+# Has the same behavior as the above for foo/bar.txt
+# files, parsing them into a bar variable for the template.
+# Otherwise presumes the template is the path.
+
+sub news_page {
+ my %args = @_;
+ my $template = "content$args{path}";
+ $args{breadcrumbs} = breadcrumbs($args{path});
+
+ my $page_path = $template;
+ $page_path =~ s/\.[^.]+$//;
+ if (-d $page_path) {
+ for my $f (grep -f, glob "$page_path/*.mdtext") {
+ $f =~ m!/([^/]+)\.mdtext$! or die "Bad filename: $f\n";
+ $args{$1} = {};
+ read_text_file $f, $args{$1};
+ }
+ }
+
+ for ((fetch_doap_url_list())[0..2]) {
+ push @{$args{projects}}, parse_doap($_);
+ }
+
+ return Dotiac::DTL::Template($template)->render(\%args), html => \%args;
+}
+
+# Recursive Sitemap generation
+# Taken from: http://svn.apache.org/repos/asf/chemistry/site/trunk/lib/view.pm
+sub sitemap {
+ my %args = @_;
+ my $template = "content$args{path}";
+ my $file = $template;
+
+ # Find the list of files
+ my ($dir) = ($file =~ /^(.*)\/.*?/);
+ my $entries = {};
+ sitemapFind($dir, $entries);
+
+ my $sitemap = "<ul>\n";
+ $sitemap = sitemapRender($sitemap, $entries, "");
+ $sitemap .= "</ul>\n";
+ $args{sitemap} = $sitemap;
+
+ return Dotiac::DTL::Template($template)->render(\%args), html => \%args;
+}
+
+sub sitemapFind {
+ my ($dir, $entries) = @_;
+ $entries->{"title"} = "";
+ $entries->{"entries"} = {};
+ my %entries = ( "title"=>"", "entries"=>{} );
+
+ foreach my $item (<$dir/*>) {
+ my ($rel) = ($item =~ /^.*\/(.*?)$/);
+
+ if(-d $item) {
+ # Only consider folders which have content page by them
+ if(-f "$item.mdtext") {
+ $rel .= ".mdtext" ;
+ $entries->{"entries"}->{$rel} = {};
+ sitemapFind($item, $entries->{"entries"}->{$rel});
+ }
+ } elsif($item =~ /\.(html|mdtext)$/) {
+ # Grab the title
+ my $title = $rel;
+ if($rel =~ /\.mdtext$/) {
+ my %args;
+ read_text_file $item, \%args;
+ $title = $args{"headers"}->{"title"};
+ } elsif ($rel =~ /\.png$/ || $rel =~ /\.jpg$/) {
+ next;
+ } else {
+ open F, "<$item";
+ my $file = "";
+ while(my $line = <F>) {
+ $file .= $line;
+ }
+ close F;
+
+ if($file =~ /block\s+title\s*\%\}(.*?)\{/) {
+ $title = $1;
+ } elsif($file =~ /title\>(.*?)\</) {
+ $title = $1;
+ }
+ }
+
+ # Process
+ if($rel =~ /^index\.(html|mdtext)$/) {
+ $entries->{"title"} = $title;
+ } else {
+ $entries->{entries}->{$rel}->{title} = $title;
+ }
+ }
+ }
+ return %entries;
+}
+
+sub sitemapRender {
+ my ($sitemap, $dir, $path) = @_;
+ my %entries = %{$dir->{"entries"}};
+
+ foreach my $e (sort keys %entries) {
+ my $fn = $e;
+ $fn =~ s/\.mdtext/.html/;
+ if($fn eq "images/" or $fn eq "resources/") {
+ next;
+ }
+
+ my $title = $entries{$e}->{title};
+ unless($title) {
+ $title = $e;
+ }
+
+ $sitemap .= "<li><a href=\"$path/$fn\">".$title."</a>";
+ if($entries{$e}->{entries}) {
+ my $parent = $e;
+ $parent =~ s/\.mdtext$//;
+ $sitemap .= "<ul>\n";
+ $sitemap = sitemapRender($sitemap, $entries{$e}, "$path/$parent");
+ $sitemap .= "</ul>\n";
+ }
+ $sitemap .= "</li>\n";
+ }
+ return $sitemap;
+}
+
+
+
+sub exports {
+ my %args = @_;
+ my $template = "content$args{path}";
+ $args{breadcrumbs} = breadcrumbs($args{path});
+
+ my $page_path = $template;
+ $page_path =~ s/\.[^.]+$/.page/;
+ if (-d $page_path) {
+ for my $f (grep -f, glob "$page_path/*.mdtext") {
+ $f =~ m!/([^/]+)\.mdtext$! or die "Bad filename: $f\n";
+ $args{$1} = {};
+ read_text_file $f, $args{$1};
+ }
+ $args{table} = `xsltproc $page_path/eccnmatrix.xsl
$page_path/eccnmatrix.xml`;
+
+ }
+
+ return Dotiac::DTL::Template($template)->render(\%args), html => \%args;
+}
+
+sub parse_doap {
+ my $url = shift;
+ my $doap = get $url or die "Can't get $url: $!\n";
+ my ($fh, $filename) = tempfile("XXXXXX");
+ print $fh $doap;
+ close $fh;
+ my $result = eval `xsltproc lib/doap2perl.xsl $filename`;
+ unlink $filename;
+ return $result;
+}
+
+sub fetch_doap_url_list {
+ my $xml = get
"http://svn.apache.org/repos/asf/infrastructure/site-tools/trunk/projects/files.xml"
+ or die "Can't get doap file list: $!\n";
+ my ($fh, $filename) = tempfile("XXXXXX");
+ print $fh $xml;
+ close $fh;
+ chomp(my @urls = grep /^http/, `xsltproc lib/list2urls.xsl $filename`);
+ unlink $filename;
+ shuffle \@urls;
+ return @urls;
+}
1;
+
+# Reads data of a referenced page
+sub read_ref_page_data {
+ my $file = shift;
+ my $out = {};
+
+ read_text_file $file, $out;
+ $out->{path} = "$file";
+ $out->{path} =~ s/content(\/.*)\.mdtext/$1.html/;
+
+ return $out;
+}
+
+sub downloadLink {
+ my ($artifact, $label) = @_;
+ my $dp = "http://www.apache.org/dist";
+ $label = $artifact unless ($label);
+ return "[$label]([preferred]/sling/$artifact)
([asc]($dp/sling/$artifact.asc), [md5]($dp/sling/$artifact.md5))";
+}
+
+sub breadcrumbs {
+ my @path = split m!/!, shift;
+ pop @path;
+ my @rv;
+ my $relpath = "";
+ my $ext;
+ my $sep = "/";
+ for (@path) {
+ $relpath .= "$sep$_";
+ if ($_) {
+ $_ = "";
+ my $datafile = "content$relpath.mdtext";
+ my %data;
+ if (-f $datafile) {
+ read_text_file $datafile, \%data;
+ $ext = ".html";
+ $sep = "/";
+ my $title = ${data{headers}}{title};
+ if ($title) {
+ $_ = $title;
+ }
+ }
+ } else {
+ $_ = "Home";
+ $ext = "";
+ $sep = "";
+ }
+ push @rv, qq(<a href="$relpath$ext">$_</a>) if $_;
+ }
+ return join " » ", @rv;
+}
+
+
+# Returns information on the last change to the file
+# as a reference to a has with three properties
+# - rev The SVN Revision
+# - date The last modification date (seconds since the epoch)
+# - author of the revision
+sub svninfo {
+ my $source = $_[0];
+ my %info;
+ my $receiver = sub {
+ my $svninfo = $_[1];
+ $info{rev} = $svninfo->last_changed_rev;
+ $info{date} = $svninfo->last_changed_date / 1000000;
+ $info{author} = $svninfo->last_changed_author;
+ };
+
+ my $ctx = SVN::Client->new;
+ $ctx->info($source, undef, undef, $receiver, 0);
+ return \%info;
+}
+
+
=head1 LICENSE
Licensed to the Apache Software Foundation (ASF) under one
Added: felix/site/trunk/readme.txt
URL:
http://svn.apache.org/viewvc/felix/site/trunk/readme.txt?rev=1421880&view=auto
==============================================================================
--- felix/site/trunk/readme.txt (added)
+++ felix/site/trunk/readme.txt Fri Dec 14 14:19:03 2012
@@ -0,0 +1,69 @@
+Working on the conversion of the Felix website to the ASF CMS,
+see https://issues.apache.org/jira/browse/FELIX-3816
+
+Notes on pages:
+
+ * Start the file with a Title: line to define the page
+ title and the first H1 tag.
+
+ * The last modification information from SVN (revision,
+ committer, and date/time) is automatically added when
+ the page is rendered
+
+ * Excerpts can be added to a page using the Excerpt
+ metadata.
+
+ * Metadata from child pages can be referred to in the
+ content with the Django variable reference notation
+ using the child page name (without extension) as
+ its container; e.g. for the child page named
+ "childpage":
+ {{ children.childpage.headers.excerpt }}
+ {{ children.childpage.headers.title }}
+
+ * Content Pages can contain Django templates of the
+ form {{...}} and {%...%}. If so, the page content
+ is evaluated as a Django template before running
+ it through the page template.
+
+ * Any page in the site can be referenced with refs.pagename
+ returning properties:
+ .path - the absolute path of the page on the site
+ .headers - page headers (e.g. .title, .excerpt)
+ .content - the raw page content
+ All pages in the children namespace are also available in
+ the refs namespace
+
+
+Some usefull hints:
+
+ * Printing title of another page "handler":
+ {{ refs.handler.headers.title }}
+
+ * Printing excerpt of another page "handler":
+ {{ refs.handler.headers.excerpt }}
+
+ * Linking to another page "handler":
+ ({{ refs.handler.path }})
+
+ * Printing title as a link to another page "handler":
+ [{{ refs.handler.headers.title }}]({{ refs.handler.path }})
+
+ * Printing excerpt as a link to another page "handler":
+ [{{ refs.handler.headers.excerpt }}]({{ refs.handler.path }})
+
+ * Print a bullet pointed child page list:
+ {% for label, page in children %}* [{{ page.headers.title }}]({{
page.path }})
+ {% endfor %}
+ Note: It is important to have the first part as a single line,
+ otherwise the Django/Markdown combo will create list for each
+ entry.
+
+ * Code Highlighting works by indenting code by four blanks.
+ To indicate the type of highlighting preced the code style text with
+ either :::<lexer> to get high lighted code using the given <lexer>
+ or #!<lexer> to get high lighted code with line numbers using the
+ given <lexer>.
+ See http://www.apache.org/dev/cmsref.html#code-hilighter for main info
+ See http://pygments.org/docs/lexers/ for supported lexers
+
Added: felix/site/trunk/templates/downloads.html
URL:
http://svn.apache.org/viewvc/felix/site/trunk/templates/downloads.html?rev=1421880&view=auto
==============================================================================
--- felix/site/trunk/templates/downloads.html (added)
+++ felix/site/trunk/templates/downloads.html Fri Dec 14 14:19:03 2012
@@ -0,0 +1,84 @@
+{% extends "skeleton.html" %}
+{% block title %}Downloads{% endblock %}
+{% block content %}
+<p>
+To get the latest development release of Apache Sling, you can check out
+the <a href="/project-information.html#source-repository">Source Code</a>
+and <a
href="/documentation/development/getting-and-building-sling.html">Getting and
Building Sling</a>
+yourself. Otherwise, the releases below are available for download. To
+install, just download and extract. These
+<a href="http://www.apache.org/dist/sling/KEYS">KEYS</a> can be used to verify
the
+release archive.
+</p>
+
+<p>
+All Apache Sling products are distributed under the terms of The Apache
+Software License (version 2.0). See our
+<a href="/project-information/project-license.html">license</a>, or the
LICENSE file included
+in each distribution.
+</p>
+
+<div class="toc">
+<ul>
+<li><a href="#mirrors">Mirrors</a></li>
+<li><a href="#application">Sling Application</a></li>
+<li><a href="#components">Sling Components</a></li>
+<li><a href="#maven">Maven Plugins</a></li>
+</ul>
+</div>
+
+<h2 id="mirrors">Mirrors</h2>
+
+<p>
+Use the links below to download binary or source distributions of Apache
+Sling from one of our mirrors.
+</p>
+
+<p>
+You are currently using <b>[preferred]</b>. If you encounter a problem with
+this mirror, please select another mirror. If all mirrors are failing,
+there are backup mirrors (at the end of the mirrors list) that should be
+available. If the mirror displayed above is labeled <i>preferred</i>, then
+please reload this page by <a href="/downloads.cgi">clicking here</a>.
+</p>
+
+<form action="[location]" method="get" id="SelectMirror">
+<p>Other mirrors: </p>
+<select name="Preferred">
+[if-any http]
+[for http]<option value="[http]">[http]</option>[end]
+[end]
+[if-any ftp]
+[for ftp]<option value="[ftp]">[ftp]</option>[end]
+[end]
+[if-any backup]
+[for backup]<option value="[backup]">[backup] (backup)</option>[end]
+[end]
+</select>
+<input type="submit" value="Change"></input>
+</form>
+
+<h2 id="application">Sling Application</h2>
+
+{{ launchpad|markdown }}
+
+<p>
+If you want to experiment with bleeding edge code,
+<a href="/documentation/development/getting-and-building-sling.html">building
Sling yourself</a>
+is not that hard.
+</p>
+
+<p>
+If you are looking for previous releases of Apache Sling, have a look in
+the <a href="http://archive.apache.org/dist/sling/">archives</a>. For previous
+incubator releases of Apache Sling, have a look in the
+<a href="http://archive.apache.org/dist/incubator/sling/">Incubator
archives</a>.
+</p>
+
+<h2 id="components">Sling Components</h2>
+{{ content|markdown }}
+
+<h2 id="maven">Maven Plugins</h2>
+{{ maven|markdown }}
+
+{% endblock %}
Added: felix/site/trunk/templates/sidenav.mdtext
URL:
http://svn.apache.org/viewvc/felix/site/trunk/templates/sidenav.mdtext?rev=1421880&view=auto
==============================================================================
--- felix/site/trunk/templates/sidenav.mdtext (added)
+++ felix/site/trunk/templates/sidenav.mdtext Fri Dec 14 14:19:03 2012
@@ -0,0 +1,20 @@
+[news](/news.html)
+[license](/licenses.html)
+[downloads](/downloads.cgi)
+[documentation](/documentation.html)
+[mailing lists](/mailinglists.html)
+[contributing](/documentation/community/contributing.html)
+[site map](/sitemap.html)
+[asf](http://www.apache.org/)
+[security](http://www.apache.org/security/)
+[sponsorship](http://www.apache.org/foundation/sponsorship.html)
+[sponsors](http://www.apache.org/foundation/thanks.html)
+
+<iframe
+ src="http://www.apache.org/ads/button.html"
+ style="border-width:0; float: left"
+ frameborder="0"
+ scrolling="no"
+ width="135"
+ height="135">
+</iframe>
Modified: felix/site/trunk/templates/single_narrative.html
URL:
http://svn.apache.org/viewvc/felix/site/trunk/templates/single_narrative.html?rev=1421880&r1=1421879&r2=1421880&view=diff
==============================================================================
--- felix/site/trunk/templates/single_narrative.html (original)
+++ felix/site/trunk/templates/single_narrative.html Fri Dec 14 14:19:03 2012
@@ -1 +1,3 @@
{% extends "skeleton.html" %}
+{% block title %}{{ headers.title }}{% endblock %}
+{% block content %}{{ content|markdown }}{% endblock %}
Modified: felix/site/trunk/templates/skeleton.html
URL:
http://svn.apache.org/viewvc/felix/site/trunk/templates/skeleton.html?rev=1421880&r1=1421879&r2=1421880&view=diff
==============================================================================
--- felix/site/trunk/templates/skeleton.html (original)
+++ felix/site/trunk/templates/skeleton.html Fri Dec 14 14:19:03 2012
@@ -1,54 +1,61 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+
+ 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.
+-->
<head>
- <title>{% block title %}{{ headers.title }}{% endblock %}</title>
-
+ <title>Apache Felix - {% block title %}{% endblock %}</title>
+ <link rel="icon" href="/res/favicon.ico">
+ <link rel="stylesheet" href="/res/site.css" type="text/css" media="all">
+ <link rel="stylesheet" href="/res/codehilite.css" type="text/css"
media="all">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
- <meta property="og:image"
content="http://www.apache.org/images/asf_logo.gif" />
-
- <link rel="stylesheet" type="text/css" media="screen"
href="http://www.apache.org/css/style.css">
- <link rel="stylesheet" type="text/css" media="screen"
href="http://www.apache.org/css/code.css">
-
- {% if headers.atom %}
- <link rel="alternate" href="{{ headers.atom.url }}"
- type="application/atom+xml" title="{{ headers.atom.title }}" />
- {% endif %}
-
- {% if headers.base %}<base href="{{ headers.base }}" />{% endif %}
- {% if headers.notice %}<!-- {{ headers.notice }} -->{% endif %}
</head>
-
<body>
- <div id="page" class="container_16">
- <div id="header" class="grid_8">
- <img src="http://www.apache.org/images/feather-small.gif" alt="The
Apache Software Foundation">
- <h1>The Apache Software Foundation</h1>
- <h2>{% block tagline %}{{ headers.title }}{% endblock %}</h2>
+ <div class="title">
+ <div class="logo">
+ <a href="http://felix.apache.org/">
+ <img border="0" alt="Apache Felix" src="/res/logo.png">
+ </a>
</div>
- <div id="nav" class="grid_8">
- <ul>
- <!-- <li><a href="/" title="Welcome!">Home</a></li> -->
- <li><a href="http://www.apache.org/foundation/" title="The
Foundation">Foundation</a></li>
- <li><a href="http://projects.apache.org" title="The
Projects">Projects</a></li>
- <li><a href="http://people.apache.org" title="The
People">People</a></li>
- <li><a href="http://www.apache.org/foundation/getinvolved.html"
title="Get Involved">Get Involved</a></li>
- <li><a href="http://www.apache.org/dyn/closer.cgi"
title="Download">Download</a></li>
- <li><a href="http://www.apache.org/foundation/sponsorship.html"
title="Support Apache">Support Apache</a></li>
- </ul>
- <p>{{ breadcrumbs|safe }}</p>
- <form name="search" id="search" action="http://www.google.com/search"
method="get">
- <input value="*.apache.org" name="sitesearch" type="hidden"/>
- <input type="text" name="q" id="query">
- <input type="submit" id="submit" value="Search">
- </form>
+ <div class="header">
+ <a href="http://www.apache.org/">
+ <img border="0" alt="Apache" src="/res/apache.png">
+ </a>
</div>
- <div class="clear"></div>
- {% block content %}<div id="content" class="grid_16"><div
class="section-content">{{ content|markdown }}</div></div>{% endblock %}
- <div class="clear"></div>
</div>
-
- <div id="copyright" class="container_16">
- <p>Copyright © 2011 The Apache Software Foundation, Licensed under
the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License,
Version 2.0</a>.<br/>Apache and the Apache feather logo are trademarks of The
Apache Software Foundation.</p>
+
+ <div class="menu">
+ {% filter markdown %}{% include "sidenav.mdtext" %}{% endfilter %}
+ </div>
+
+ <div class="main">
+ <div class="breadcrump" style="font-size: 80%;">
+ {{ breadcrumbs|safe }}
+ </div>
+ <h1>{% block title %}{% endblock %}</h1>
+ {% block content %}{% endblock %}
+ <div class="timestamp" style="margin-top: 30px; font-size: 80%;
text-align: right;">
+ Rev. {{ svninfo.rev }} by {{ svninfo.author|safe }} on {{
svninfo.date|date:"D, j M Y H:i:s O" }}
+ </div>
+ <div class="trademarkFooter">
+ Apache Felix, Felix, Apache, the Apache feather logo, and the Apache
Felix project
+ logo are trademarks of The Apache Software Foundation. All other marks
mentioned
+ may be trademarks or registered trademarks of their respective owners.
+ </div>
</div>
</body>
</html>