1. Alain O'Dea
  2. zotonic

Commits

Arjan Scherpenisse  committed 3b98b99

skel site support for 'zotonic addsite'.

- moved default site to priv/skel/blog
- simplified addsite script
- created install mechanism for default data
- moved demo data from default site to src/install
- created mechanism to add default menu structure
- added "-s <skel>" option to addsite
- updated documentation ZotonicCommands.txt
- added options to addsite to specify database crdentials
- added defaults mechanism in $HOME/.zotonic-defaults
- updated INSTALL instructions
- added 'empty' skeleton

  • Participants
  • Parent commits 38416df
  • Branches default

Comments (0)

Files changed (105)

File doc/INSTALL

View file
    use packages (see platform-specific notes below)
 
 2. Install ImageMagick (version 6.5 or higher) for the 'convert' and
-   'identify' tools (also install libjpeg, -tiff, -png and other
-   required libraries).  Make sure that the convert and identify tools
+   'identify' tools.  Make sure that the convert and identify tools
    are in your path so that zotonic can find them. For auto-rotation
    to work you'll need the "exif" utility as well.
 
 Steps to install Zotonic
 ------------------------
 
-Make sure you put the zotonic source in a directory named 'zotonic'
-(important for now; we're working on a solution for this).
-
 1. Type "make" in the root of zotonic (there where the Makefile is located). (*1)
 
-2. Create an user and database in PostgreSQL:
+2. Create an user and database in PostgreSQL (change the password for the user!):
 
-CREATE USER zotonic WITH PASSWORD 'yourdbpassword';
-CREATE DATABASE zotonic WITH OWNER = zotonic ENCODING = 'UTF8';
-GRANT ALL ON DATABASE zotonic TO zotonic;
-\c zotonic
-CREATE LANGUAGE "plpgsql";
+   CREATE USER zotonic WITH PASSWORD 'zotonic';
+   CREATE DATABASE zotonic WITH OWNER = zotonic ENCODING = 'UTF8';
+   GRANT ALL ON DATABASE zotonic TO zotonic;
+   \c zotonic
+   CREATE LANGUAGE "plpgsql";
 
-4. Create the configuration for the default site by copying
-   priv/sites/default/config.in to priv/sites/default/config
+3. Create a new zotonic site, based on the "blog" skeleton site:
 
-5. Edit this file; at least specify the credentials to the postgres database.
+   bin/zotonic addsite -s blog yoursite
 
-5. Make sure that the directory "priv/sites/default" and all its subdirectories are readable 
-   and writeable for the current user. (Which is the user zotonic will run under.)
+   This will add a site named yoursite. Its default URL will be
+   http://yoursite:8000/ so either put 'yoursite' in your hosts
+   file or change the {hostname} section of the config file.
 
-6. Start zotonic in debug mode:
+4. Edit the generated file priv/sites/yoursite/config, to make sure
+   your database credentials and the hostname are correct, and change
+   the password for the admin.
 
-  ./start.sh
+5. Start zotonic in debug mode:
 
-7. You see zotonic starting up, lots of messages pass by, and zotonic will install the initial database.
-   When something goes wrong here, then it is almost always a problem with the database connection. Check your 
-   database configuration in the zotonic.sh file.
+   bin/zotonic debug
+
+7. You see zotonic starting up, lots of messages pass by, and zotonic
+   will install the initial database.  When something goes wrong here,
+   then it is almost always a problem with the database
+   connection. Check your database configuration in the zotonic.sh
+   file.
 
 8. Point your browser to 
 	
-    http://localhost:8000/
+    http://yoursite:8000/
 	
-   or logon as user 'admin' (the default password is empty) at: 
+   or logon as user 'admin' (the default password is 'admin') at:
 
-    http://localhost:8000/admin/
-
-   You will be asked to change the admin password before you can proceed into the admin.
+    http://yoursite:8000/admin/
 
 9. When all done, then you can stop the erlang shell with:
 
     q().
-  
+
+   or pressing ctrl-c twice.
 
 
 
 
 Windows
 -------
-Currently, Zotonic has not been tested on the Windows
+Currently, Zotonic is not officially supported on the Windows
 platform. However, the main dependencies Erlang, PostgreSQL and
 ImageMagick do work on Windows, so, if you're adventurous, it should
 be possible to get it running.
 
-For a start, you'll have to compile Zotonic and make a Windows version
-of start.sh, probably as a .bat file.... We'd love to hear your
-progress! Post a message to zotonic-developers@googlegroups.com to
-inform us of your progress.
+We have included user-contributed "start.cmd" and "build.cmd"
+batch-scripts which are supposed to work on Windows.
+
+
+Mac OS X
+--------
+
+With MacPorts you can install Erlang and ImageMagick using the
+following commands:
+
+  sudo port install erlang +ssl
+  sudo port install ImageMagick
+
+EnterpriseDB has an excellent PostgreSQL installer available at
+http://www.enterprisedb.com/products/pgdownload.do#osx
+
+For a very basic step-by-step installation on OSX, chick this
+http://timbenniks.nl/blog/712/step-by-step-guide-to-install-zotonic-on-osx.

File doc/ZotonicCommands.txt

View file
 this with built-in OS X CLI tools.  This is needed to traverse deeply
 symlinked commands.
 
-zotonic addsite [site_name]
---------------------------
-Create a new site with [site_name] as its name.  This new site will be based
-on the current content of the default site.  It uses the default site as a
-template or skeleton.
+
+zotonic addsite [options] <site_name>
+-------------------------------------
+Create a new site with [site_name] as its name.  This new site will be
+based on a so-called skeleton site. Currently there are two skeletons:
+'blog' and 'empty'. "blog" is the default. 
+
+"zotonic addsite -s empty yoursite" creates a new site called
+"yoursite" based on the skeleton called "empty". Full usage:
+
+zotonic-addsite [options] <site_name>
+
+  -s <skel>    Skeleton site ('blog' or 'empty'; default: blog)
+
+  -h <host>    Database host (default: 127.0.0.1)
+  -p <port>    Database port (default: 5432)
+  -u <user>    Database user (default: zotonic)
+  -P <pass>    Database password (default: zotonic)
+  -d <name>    Database name (default: zotonic)
+  -n <schema>  Database schema (default: public)
+
 
 zotonic copysite [site_name] [source_server]
 --------------------------------------------
 retrieved from the [source_server].  It does, however, generate and output
 a restore file in case this was run by accident and explains how to recover.
 
+
 zotonic createdb [site_name]
 ----------------------------
 Create a database called zotonic_[site_name] with the basic setup in place to
 
 	ALTER ROLE zotonic WITH CREATEDB
 
+
 zotonic debug
 -------------
-Launch the Zotonic server interactively and get an EShell on the running
-instance.  This is very similar to running ./start.sh.
+Launch the Zotonic server interactively and get an EShell on the
+running instance.  This command used to be called "./start.sh" in
+Zotonic 0.6 and earlier.
+
 
 zotonic restart
 ---------------
 Restart the background Zotonic server instance.
 
+
 zotonic shell
 -------------
 Connect to the background Zotonic server instance and provide and EShell.
 
+
 zotonic sitedir [site_name]
 ---------------------------
 Get the absolute path for a site based on [site_name]
 
+
 zotonic snapshot [site_name]
 ----------------------------
 Take a version control snapshot of [site_name] including its database content.
 filename for the SQL backup to make revision-based full site rollbacks
 possible.
 
+
 zotonic start
 -------------
 Start the background Zotonic server instance.
 
+
 zotonic stop
 ------------
 Stop the background Zotonic server instance.
 
+
 zotonic update
 --------------
 Update the server.  Compiles and loads any new code, flushes caches and
-rescans all modules.
+rescans all modules.

File modules/mod_menu/mod_menu.erl

View file
     set_menu/3,
     observe_menu_get_rsc_ids/2,
     test/0,
-    menu_flat/1
+    menu_flat/1,
+    convert_symbolic_names/1
 ]).
 
 
 init(Context) ->
-    z_datamodel:manage(?MODULE, datamodel(), Context),
+    z_datamodel:manage(?MODULE, datamodel(Context), Context),
+    z_pivot_rsc:insert_task(?MODULE, convert_symbolic_names, Context),
     case m_config:get(menu, menu_default, Context) of
         undefined -> ok;
         Props -> 
     end.
 
 
-datamodel() ->
+datamodel(Context) ->
     [
      {categories,
       [
        {main_menu,
         menu,
         [{title, <<"Main menu">>},
-         {menu, [{312, []}, {313, []}, {314, []}]}
+         {menu, z_install_defaultdata:default_menu(m_site:get(skeleton, Context))}
         ]
        }
       ]}
         ++ menu_flat(Rest, [Idx+1|PR], [])
         ++  Acc.
 
+
+%% @doc Convert the menu structure as installed (which can contain
+%%      resource names) to a menu which only contains numeric
+%%      ids. This is needed for the menu trail to correctly function.
+convert_symbolic_names(Ctx) ->
+    Context = z_acl:sudo(Ctx),
+    Menu = get_menu(Context),
+    Menu2 = menu_names_to_ids(Menu, Context),
+    set_menu(Menu2, Context),
+    ok.
+
+menu_names_to_ids(Menu, Ctx) ->
+    menu_names_to_ids(Menu, Ctx, []).
+
+menu_names_to_ids([], _Ctx, Acc) ->
+    lists:reverse(Acc);
+menu_names_to_ids([{Item, Childs}|Rest], Context, Acc) ->
+    Id = case Item of
+             X when is_integer(X) -> X;
+             N -> m_rsc:rid(N, Context)
+         end,
+    [{Id, menu_names_to_ids(Childs, Context, [])} | menu_names_to_ids(Rest, Context, Acc)].
+    
+
+%% @doc test function
 %%  111  [1]
 %%  - 44   [1,1]
 %%  - - 555  [1,1,1]
 %%  - - 666  [1,1,2]
 %%  222  [2]
 %%  - 333  [2,1]
-
 test() ->
 
     [

File priv/sites/default/config.in

-% Configuration of the default zotonic site.
-% Copy this file to 'config' and change the settings below.
-[
-    % This site is enabled or not.
-    {enabled, true},
-    
-    % Atomic hostname, MUST be equal to the directory name of this site.
-    {host, default},
-
-    % Hostname for virtual host support. Change this to your real
-    % hostname (e.g. www.example.com) once you move your site to
-    % production.
-    {hostname, "127.0.0.1:8000"},
-
-    % Aliases which should redirect to the primary hostname
-    {hostalias, "www.example.com"},
-    {hostalias, "example.com"},
-
-    
-    % PostgreSQL database connection
-    {dbhost, "127.0.0.1"},
-    {dbport, 5432},
-    {dbuser, "zotonic"},
-    {dbpassword, "zotonic"},
-    {dbdatabase, "zotonic"},
-    {dbschema, "public"},
-    
-    % Password for the 'admin' user.
-    {admin_password, "admin"},
-
-    % Now you'll need to construct two keys. They should be short strings of random characters. Like good passwords, they should be hard to guess.
-
-    % Key used for signing image urls with image manipulations (crop, rotate, resize, etc.)
-    %  This key will help prevent denial of service attacks.
-    % A new key will also forces regenerating images, which takes cpu time and will fill your hard disk.
-    {sign_key_simple, <<"--change-me--">>},
-    
-    % Key used for signing postbacks - this _must_ be a hard to guess key, otherwise your system is insecure.
-    % When not defined, then zotonic will generate a new key on every restart.
-    % When a new key is generated then all postbacks from old html pages will fail.
-    {sign_key, <<"--change-me--">>},
-
-    %% Specific options
-
-    %% Title of your site
-    {title, <<"Your first blog">>},
-    %% Subtitle
-    {subtitle, <<"built with Zotonic, the Erlang CMS.">>},
-
-    %% Page length
-    {pagelen, 5}
-].

File priv/sites/default/default.erl

-%% @author Arjan Scherpenisse <arjan@scherpenisse.net>
-%% @copyright 2009 Arjan Scherpenisse
-%% @date 2009-12-12
-%% @doc Module implementing a basic blog.
-
-%% Licensed 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.
-
--module(default).
--author("Arjan Scherpenisse <arjan@scherpenisse.net>").
-
--mod_title("Default Zotonic site").
--mod_description("A simple weblog, used as an example of how to create a Zotonic site.").
--mod_prio(10).
-
-%% gen_server exports
--export([init/1]).
-
--include_lib("zotonic.hrl").
-
-%% @doc Initialize the datamodel
-init(Context) ->
-    z_datamodel:manage(?MODULE, datamodel(), Context).
-
-%%====================================================================
-%% support functions
-%%====================================================================
-
-datamodel() ->
-    Now = {{2010,04,03},{9,12,0}},
-    [
-     {resources,
-      [
-
-       %% MENU ENTRIES
-
-       {page_home,
-        text,
-        [{title, <<"Home">>},
-         {summary, <<"Welcome to your blog!">>},
-         {page_path, <<"/">>}]
-       },
-
-       {page_about,
-        text,
-        [{title, <<"About this blog">>},
-         {summary, <<"This is your blog!! It would be wise to type some text here on what you will be writing about. Ofcourse, this page is just a demo page and can be deleted just as well.">>}]
-       },
-
-       {page_contact,
-        text,
-        [{title, <<"Contact">>},
-         {summary, <<"Get in contact with us! Use the form below to send this site's administrator some feedback on how you perceive this site.">>},
-         {page_path, <<"/contact">>}]
-       },
-
-
-       %% BLOG ENTRIES
-
-       {blog_article_welcome,
-        article,
-        [{title, <<"Welcome to Zotonic " ?ZOTONIC_VERSION "!">>},
-         {publication_start, Now},
-         {summary, <<"Zotonic is the content management system for people that want a fast, extensible, flexible and complete system for dynamic web sites. It is built from the ground up with rich internet applications ánd web publishing in mind.">>},
-         {body, {file, filename:join([z_utils:lib_dir(priv), "sites", ?MODULE, "demodata", "welcome.html"])}}
-        ]
-       },
-       {blog_article_learnmore,
-        article,
-        [{title, <<"Want to learn more?">>},
-         {publication_start, z_datetime:prev_day(Now)},
-         {summary, <<"This blog website you're looking demonstrates only a small part of what you can do with a Zotonic site. For instance, did you know that sending mass-mailings is a builtin module? That it does OAuth out of the box? That Zotonic sites are SEO optimized by default?">>},
-         {body, {file, filename:join([z_utils:lib_dir(priv), "sites", ?MODULE, "demodata", "learnmore.html"])}}]
-       },
-       {blog_article_demo,
-        article,
-        [{title, <<"Zotonic's Typography">>},
-         {publication_start, z_datetime:prev_month(Now)},
-         {summary, <<"This article demonstrates the typographic features that Zotonic has. It shows creating ordered and unordered lists, blockquotes, and different methods of embedding media, even even showing an embedded video from Vimeo.com.">>},
-         {body, {file, filename:join([z_utils:lib_dir(priv), "sites", ?MODULE, "demodata", "demo.html"])}}
-        ]
-       },
-
-       %% KEYWORDS
-
-       {kw_announcement,
-        keyword,
-        [{title, <<"Announcement">>}]
-       },
-       {kw_technical,
-        keyword,
-        [{title, <<"Technical">>}]
-       },
-       {kw_support,
-        keyword,
-        [{title, <<"Support">>}]
-       }
-
-      ]
-     },
-
-     {media,
-      [
-       {media_learning,
-        filename:join([z_utils:lib_dir(priv), "sites", ?MODULE, "demodata", "learning.jpg"]),
-        [{title, <<"A bunch of computer books">>},
-         {summary, <<"Taken by Sibi from Flickr, licensed Attribution-Noncommercial-No Derivative Works 2.0.">>}]
-       },
-       {media_welcome,
-        filename:join([z_utils:lib_dir(priv), "sites", ?MODULE, "demodata", "welcome.jpg"]),
-        [{title, <<"Rocky sunrise">>},
-         {summary, <<"Taken by Grant MacDonald from Flickr, CC licensed Attribution-Noncommercial 2.0.">>}]
-       },
-       {media_video,
-        {<<"vimeo">>, <<"<object width=\"400\" height=\"225\"><param name=\"allowfullscreen\" value=\"true\" /><param name=\"allowscriptaccess\" value=\"always\" /><param name=\"movie\" value=\"http://vimeo.com/moogaloop.swf?clip_id=7630916&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=&amp;fullscreen=1\" /><embed src=\"http://vimeo.com/moogaloop.swf?clip_id=7630916&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=&amp;fullscreen=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" allowscriptaccess=\"always\" width=\"400\" height=\"225\"></embed></object>">>},
-        [{title, <<"Zotonic introduction video">>}]
-       }
-      ]
-     },
-
-     {edges,
-      [
-       {blog_article_learnmore, author, administrator},
-       {blog_article_welcome, author, administrator},
-       {blog_article_demo, author, administrator},
-
-       {blog_article_learnmore, subject, kw_support},
-       {blog_article_demo, subject, kw_technical},
-       {blog_article_welcome, subject, kw_support},
-       {blog_article_welcome, subject, kw_announcement},
-
-       {blog_article_welcome, depiction, media_welcome},
-       {blog_article_learnmore, depiction, media_learning},
-       {blog_article_demo, depiction, media_welcome}
-
-      ]
-     }
-    ].

File priv/sites/default/demodata/demo.html

-<h2>Demonstrating inline images</h2>
-
-<p><!-- z-media 320 {"align": "right"} -->This image is aligned to the left. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras rutrum purus eu risus suscipit semper. Quisque dolor velit, accumsan et vulputate vel, convallis a felis. Pellentesque pellentesque posuere turpis, sed consectetur risus blandit a. Mauris nunc nibh, mattis eu dapibus quis, volutpat at magna. Duis facilisis mauris vel nisi tempus ac tincidunt lectus hendrerit. Phasellus eleifend ultrices tempus. Phasellus imperdiet dictum orci sit amet euismod. Suspendisse in nulla nibh, id iaculis sapien. Ut dictum scelerisque magna nec convallis. Nullam eget justo nec lacus vulputate condimentum. Now comes a block image: </p>
-
-<p><!-- z-media 320 {"align": "left"} -->This image is aligned to the right. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras rutrum purus eu risus suscipit semper. Quisque dolor velit, accumsan et vulputate vel, convallis a felis. Pellentesque pellentesque posuere turpis, sed consectetur risus blandit a. Mauris nunc nibh, mattis eu dapibus quis, volutpat at magna. Duis facilisis mauris vel nisi tempus ac tincidunt lectus hendrerit. Phasellus eleifend ultrices tempus. Phasellus imperdiet dictum orci sit amet euismod. Suspendisse in nulla nibh, id iaculis sapien. Ut dictum scelerisque magna nec convallis. Nullam eget justo nec lacus vulputate condimentum. </p>
-
-<!--
-  commented out for now, because the styling is non-optimal
-<h2>Various lists</h2>
-
-<p>Some of the default list styles:</p>
-
-<ol>
-    <li>I am an ordered list.
-        <ol>
-            <li>This is a sublist of the ordered list.</li>
-            <li>Another listitem</li>
-        </ol>
-    </li>
-    <li>Yes, I really am an ordered list.</li>
-    <li>Enough content for now.</li>
-</ol>
-
-<ul>
-    <li>I am an unordered list.</li>
-    <li>Yes, I really am an unordered list.</li>
-    <li>Foo, bar basz</li>
-    <li>Enough content for now.</li>
-</ol>
--->
-
-<h2>Vimeo video</h2>
-
-<p>The video you all have been waiting for:</p>
-
-<p><!-- z-media 322 {"align": "block"} --></p>

File priv/sites/default/demodata/learning.jpg

Removed
Old image

File priv/sites/default/demodata/learnmore.html

-<h2>Documentation pages</h2>
-
-<p>Zotonic is well documented. All documentation can be found on the Zotonic website:
-<a href="http://zotonic.com/documentation">http://zotonic.com/documentation</a>
-</p>
-
-<p><!-- z-media 320 {"align": "block"} --></p>
-
-<h2>Mailing lists</h2>
-
-<p>We have two mailing lists. One for people who use Zotonic as editors, and one for people developing with or on Zotonic.</p>
-<ul>
-<li>
-<a href="http://groups.google.com/group/zotonic-users">zotonic-users@googlegroups.com</a>
-</li>
-<li>
-<a href="http://groups.google.com/group/zotonic-developers">zotonic-developers@googlegroups.com</a>
-</li>
-</ul>

File priv/sites/default/demodata/welcome.html

-<p><!-- z-media 321 {"align": "block"} --></p>
-
-<p>Zotonic is well supported. Join the mailing lists or contact us for
-commercial grade support. We have two mailing lists. One for people
-who use Zotonic as editors, and one for people developing with or on
-Zotonic.</p>
-
-<p>Do you need direct access to experts? Need extensions to Zotonic?
-Need active support for a Zotonic project? We offer excellent support
-and services for all Zotonic web
-projects. <a href=\"mailto:info@whatwebwhat.com\">Contact us</a> and
-explain what you would like. We can help you.</p>

File priv/sites/default/demodata/welcome.jpg

Removed
Old image

File priv/sites/default/dispatch/dispatch

-%% Dispatch rules for mod_zotonic.
-
-[
-    {home,      [],                         resource_page,  	[ {template, "home.tpl"}, {id, page_home} ]},
-    {article,   ["article", id, slug],      resource_page,  	[ {template, "article.tpl"}, {cat, article} ]},
-    {keyword,	["by_keyword", id, slug],	resource_page,		[ {template, "by_keyword.tpl"} ]},
-
-    {page_contact,	["contact"],            resource_page,		[ {template, "contact.tpl"}, {id, page_contact} ]},
-
-    {archives_y,["archives", year],			resource_template,	[ {template, "archives.tpl"}, {cat, article} ]},
-    {archives_m,["archives", year, month],	resource_template,	[ {template, "archives.tpl"}, {cat, article} ]}
-].

File priv/sites/default/files/archive/koe.jpg

Removed
Old image

File priv/sites/default/files/dropbox/.empty

-

File priv/sites/default/files/preview/.empty

-

File priv/sites/default/files/processing/.empty

-

File priv/sites/default/files/unhandled/.empty

-

File priv/sites/default/lib/css/zp-menu.css

-/* Styling for menu's in the default blog template.
-----------------------------------------------------------
-
-@package:	Atatonic CSS framework 2009	
-@Author: 	Tim Benniks <tim@timbenniks.nl>
-@Created: 	10-12-2009
-@Changed:	19-03-2010
-
-Copyright 2010 Tim Benniks <tim@timbenniks.nl>
-
-Licensed 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.
-
-
-/* navigation
----------------------------------------------------------- */
-
-nav {
-	margin: 0 0 24px 0;
-}
-
-
-/*** ESSENTIAL STYLES ***/
-.sf-menu, .sf-menu * {
-	margin:			0;
-	padding:		0;
-	list-style:		none;
-}
-.sf-menu {
-	line-height:	1.0;
-}
-.sf-menu ul {
-	position:		absolute;
-	top:			-999em;
-	width:			14em; /* left offset of submenus need to match (see below) */
-}
-.sf-menu ul li {
-	width:			100%;
-}
-.sf-menu li:hover {
-	visibility:		inherit; /* fixes IE7 'sticky bug' */
-}
-.sf-menu li {
-	float:			left;
-	position:		relative;
-}
-.sf-menu a {
-	display:		block;
-	position:		relative;
-}
-.sf-menu li:hover ul,
-.sf-menu li.sfHover ul {
-	left:			0;
-	top:			1.9em; /* match top ul list item height */
-	z-index:		99;
-}
-ul.sf-menu li:hover li ul,
-ul.sf-menu li.sfHover li ul {
-	top:			-999em;
-}
-ul.sf-menu li li:hover ul,
-ul.sf-menu li li.sfHover ul {
-	left:			14em; /* match ul width */
-	top:			0;
-}
-ul.sf-menu li li:hover li ul,
-ul.sf-menu li li.sfHover li ul {
-	top:			-999em;
-}
-ul.sf-menu li li li:hover ul,
-ul.sf-menu li li li.sfHover ul {
-	left:			14em; /* match ul width */
-	top:			0;
-}
-
-/*** SKIN ***/
-.sf-menu {
-	float:			left;
-
-}
-.sf-menu a {
-    border: 0;
-	border-left:	1px solid #fff;
-	padding: 		.45em 1em;
-	text-decoration:none;
-}
-.sf-menu a, .sf-menu a:visited  { /* visited pseudo selector so IE6 applies text colour*/
-	color:			#333;
-}
-.sf-menu li {
-
-}
-.sf-menu li li {
-	background:		#eee;
-}
-.sf-menu li li li {
-	background:		#eee;
-}
-.sf-menu li:hover, .sf-menu li.sfHover,
-.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active {
-	background:		#bbb;
-	outline:		0;
-}
-
-.sf-menu li ul li a {
-    border-top: 1px dotted #aaa;
-}
-
-.sf-menu a.current {
-    background: #ddd;
-}
-
-/*** arrows **/
-.sf-menu a.sf-with-ul {
-	padding-right: 	2.25em;
-	min-width:		1px; /* trigger IE7 hasLayout so spans position accurately */
-}
-.sf-sub-indicator {
-	position:		absolute;
-	display:		block;
-	right:			.75em;
-	top:			1.05em; /* IE6 only */
-	width:			10px;
-	height:			10px;
-	text-indent: 	-999em;
-	overflow:		hidden;
-	background:		url('/lib/images/arrows-333333.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-a > .sf-sub-indicator {  /* give all except IE6 the correct values */
-	top:			.6em;
-	background-position: 0 -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-a:focus > .sf-sub-indicator,
-a:hover > .sf-sub-indicator,
-a:active > .sf-sub-indicator,
-li:hover > a > .sf-sub-indicator,
-li.sfHover > a > .sf-sub-indicator {
-	background-position: -10px -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.sf-menu ul .sf-sub-indicator { background-position:  -10px 0; }
-.sf-menu ul a > .sf-sub-indicator { background-position:  0 0; }
-/* apply hovers to modern browsers */
-.sf-menu ul a:focus > .sf-sub-indicator,
-.sf-menu ul a:hover > .sf-sub-indicator,
-.sf-menu ul a:active > .sf-sub-indicator,
-.sf-menu ul li:hover > a > .sf-sub-indicator,
-.sf-menu ul li.sfHover > a > .sf-sub-indicator {
-	background-position: -10px 0; /* arrow hovers for modern browsers*/
-}
-
-/*** shadows for all but IE6 ***/
-.sf-shadow ul {
-	background:	url('/lib/images/shadow.png') no-repeat bottom right;
-	padding: 0 8px 9px 0;
-	-moz-border-radius-bottomleft: 17px;
-	-moz-border-radius-topright: 17px;
-	-webkit-border-top-right-radius: 17px;
-	-webkit-border-bottom-left-radius: 17px;
-}
-.sf-shadow ul.sf-shadow-off {
-	background: transparent;
-}
-    
-
-/* Footer navigation styles
----------------------------------------------------------- */
-
-footer #navigation {
-	margin: 0;
-}
-
-footer #navigation li a {
-	font-size: 12px;
-	font-variant: small-caps;
-	text-transform: lowercase;
-	color: #666;
-	border: none;
-	margin: 0 6px 0 0;
-}
-
-	footer #navigation li a:hover {
-		color: #154868;
-	}

File priv/sites/default/lib/css/zp-project.css

-/* Styling for default blog template.
-----------------------------------------------------------
-
-@package:	Atatonic CSS framework 2009	
-@Author: 	Tim Benniks <tim@timbenniks.nl>
-@Created: 	10-12-2009
-@Changed:	19-03-2010
-
-Copyright 2010 Tim Benniks <tim@timbenniks.nl>
-
-Licensed 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.
-
----------------------------------------------------------- */
-
-body {
-	background: #fff url(../images/bg.png) repeat-x left top;
-	color: #333;
-	font: 14px/24px Georgia, Times, serif;
-}
-
-aside, header, footer, figure, article {
-	display: block !important;
-}
-
-
-/* Typography
----------------------------------------------------------- */
-
-h1 {
-	color: #163a51;
-	font-size: 18px;
-	line-height: 24px;
-	margin: 0 0 12px 0;
-	font-style: normal;
-}
-
-	header h1 {
-		color: #fff;
-		margin: 11px 0 0 0;
-		font-size: 27px;
-	}
-	
-	header h1 a,
-	header h1 a:focus {
-		color: #fff;
-		border: none;
-	}
-	
-	header h1 a:hover {
-		color: #eee;
-	}
-	
-	header h1 span {
-		font-style: italic;
-		font-size: .6em;
-	}
-
-h2 {
-	color: #163a51;
-	margin: 0 0 12px 0;
-	font-size: 16px;
-	line-height: 24px;
-	font-style: normal;
-}
-
-	#sidebar h2 {
-		color: #333;
-		margin: 0;
-	}
-
-h3 {
-	font-family: georgia, times, serif;
-	font-size: 12px;
-	line-height: 24px;
-	font-style: normal;
-	font-weight: bold;
-	color: #333;
-}
-
-h5.chapeau {
-	font-variant: small-caps;
-	color: #333;
-	border-bottom: 1px dotted #333;
-	text-transform: uppercase;
-	font-size: 12px;
-	line-height: 24px;
-	margin: 0 0 24px 0;
-}
-
-
-a, a:focus {
-	color: #154868;
-	text-decoration: none;
-	border-bottom: 1px dotted #154868;
-}
-
-a:hover {
-	color: #000;
-	text-decoration: none;
-}
-
-p {
-	margin: 0 0 18px 0;
-}
-
-	p.summary {
-		font-style: italic;
-	}
-	
-	p.summary:first-letter {
-		font-size: inherit;
-		font-weight: normal;
-		line-height: inherit;
-		letter-spacing: 0;
-		float: none;
-		padding: 0;
-		width: auto;
-	}
-	
-	p.summary:first-line,
-	p.important:first-line {
-		font-variant: normal;
-	}
-	
-	p.important:first-letter {
-		font-size: 51px;
-		font-weight: normal;
-		line-height: 32px;
-		letter-spacing: 5px;
-		float: left;
-		padding: 6px 0 0 0;
-		width: auto;
-		color: #154868;
-		font-family: Georgia, Times, serif;
-	}
-	
-	p.keywords {
-		font-size: 12px;
-		font-style: italic;
-	}
-	
-.author {
-	font-style: italic;
-	font-variant: normal;
-	text-transform: none;
-}
-
-p img, li img {
-	margin: 6px 6px 0 0;
-}
-
-p img.right, li img.right {
-	margin: 6px 0 0 9px;
-}
-
-p img.block {
-	display: block;
-	float: none;
-	margin: 0 0 18px 0;
-}
-
-
-/* Grid
----------------------------------------------------------- */
-
-.zp-wrapper {
-	width: 900px;
-}
-
-header {
-	height: 48px;
-}
-
-#content .padding {
-	padding: 0 90px 0 0;
-}
-
-
-/* Footer - see footer navigation styles in the zp-menu.css
------------------------------------------------------- */
-
-footer {
-	margin: 47px 0;
-	border-top: 1px dotted #333;
-	padding: 9px 0 0 0;
-}
-
-footer p.footer-blog-title {
-	margin: 0;
-	font-size: 12px;
-	font-variant: small-caps;
-	text-transform: lowercase;
-	color: #666;
-}
-
-
-/* Lists
----------------------------------------------------------- */
-
-#content ul,
-#content ol {
-	margin: 0 0 18px 0;
-	list-style-position: inside;
-	list-style-type: disc;
-}
-
-	#content ol {
-		list-style-type: decimal;
-	}
-
-#content .comments-list {
-	list-style: none;
-}
-
-.item-list p {
-	font-size: 12px;
-	margin: 0;
-}
-
-	.item-list li {
-		margin: 0 0 18px 0;
-	}
-
-
-.simple-list {
-	margin: 0 0 18px 0;
-}	
-
-    .simple-list ul {
-	    margin-left: 9px;
-    }
-
-	.simple-list li a {
-		font-size: 12px;	
-	}
-	
-.pager li {
-	display: inline;
-}
-
-	.pager li.disabled {
-		display: none;
-	}
-
-.images-list {
-	margin: 0 0 18px 0;
-	list-style: none;
-}
-
-	.images-list li {
-		margin: 0 0 18px 0;
-	}
-	
-	.images-list li:last-child {
-		margin: 0;
-	}
-
-	.images-list li img {
-		float: none;
-		display: block;
-		margin: 0;
-	}
-
-.shouts-list {
-	font-size: 12px;
-	line-height: 18px;
-	list-style: none;
-}
-
-	.shouts-list .tweet-date-time {
-		font-style: italic;
-		color: #888;
-	}
-
-
-/* Posts
----------------------------------------------------------- */	
-	
-.post {
-	margin: 0 0 36px 0;
-}
-
-.post h1 {
-	margin: 0;
-}
-	
-	.post h1 a {
-		border: none;
-	}
-
-.post p:last-child {
-	margin: 0;
-}
-
-.post .article-meta {
-	font-size: 12px;
-	font-style: italic;
-	margin: 0;
-	color: #666;	
-}
-
-.post img {
-	margin: 6px 6px 0 0;
-	display: block;
-	float: left;
-}
-
-.prevnext {
-	margin: 36px 0 0 0;
-	overflow: hidden; /* clearfix hack */
-}
-
-	.prevnext a {
-		font-size: 12px;
-		color: #333;
-	}
-	
-		.prevnext a:hover {
-			color: #154868;
-		}
-
-	.prevnext .prev {
-		float: left;
-	}
-	
-	.prevnext .next {
-		float: right;
-	}
-
-
-/* Images
----------------------------------------------------------- */
-
-figure.image-wrapper {
-	margin: 0 0 18px 0;
-	width: 100%;
-}
-
-	.block-level-image img {
-		display: block;
-		margin: 0;
-	}
-
-p.image-caption {
-	display: block;
-	font: 11px/18px arial, helvetica, sans-serif;
-	margin: 0;
-	color: #666;
-}
-
-
-/* Misc
----------------------------------------------------------- */
-
-#ie6-upgrade {
-	padding: 5px 10px;
-}
-
-#ie6-upgrade h4 {
-	color: #000;
-	font-weight: bold;
-}
-
-#ie6-upgrade a {
-	color: #000;
-	text-decoration: underline;
-	border: none;
-}
-
-	#ie6-upgrade a:hover {
-		border: none;
-		color: #444;
-	}
-
-
-/* Comments
----------------------------------------------------------- */
-#comments-form input {
-	width: 109px;
-	margin: 0;
-}
-
-#comments-form textarea {
-	width: 288px;
-	margin: 0;
-}
-
-#comments-form label {
-	float: none;
-	display: block;
-	
-}
-	
-	.comments-list li {
-		border-bottom: 1px dotted #aaa;
-		margin: 0 0 18px 0;
-		padding: 0 0 17px 0;
-	}
-	
-		.comments-list li p {
-			margin: 0;
-		}
-		
-		.comments-list li h3 {
-			font-weight: normal;
-			font-style: italic;
-			color: #555;
-			font-size: 16px;
-			line-height: 1;
-		}
-		
-		.comments-list li img {
-			margin: 2px 6px 0 0;
-		}
-		
-		.comments-list li .comment-meta {
-			font-size: 12px;
-			color: #666;
-			line-height: 18px;
-		}
-
-
-/* Inline list
----------------------------------------------------------- */
-li a.caption {
-    font-weight: bold;
-}
-
-.inline-list {
-	margin: 0 0 18px 0;
-    clear: both;
-}	
-
-    .inline-list li {
-        float: left;
-        margin-right: 4px;
-    }
-
-
-	.inline-list li a {
-		font-size: 12px;	
-	}

File priv/sites/default/lib/images/arrows-333333.png

Removed
Old image

File priv/sites/default/lib/images/arrows-ffffff.png

Removed
Old image

File priv/sites/default/lib/images/bg.png

Removed
Old image

File priv/sites/default/lib/images/shadow.png

Removed
Old image

File priv/sites/default/modules/.emtpty

-

File priv/sites/default/resources/.emtpty

-

File priv/sites/default/resources/resource_default_contact.erl

-%% @author author <author@example.com>
-%% @copyright YYYY author.
-%% @doc Example contact-form handler.
-
--module(resource_default_contact).
--export([event/2]).
-
--include_lib("zotonic.hrl").
-
-event({submit, {contact, []}, _TriggerId, _TargetId}, Context) ->
-    Vars = [{mail, z_context:get_q("mail", Context)},
-            {name, z_context:get_q("name", Context)},
-            {message, z_context:get_q("message", Context)}],
-    z_email:send_render(z_email:get_admin_email(Context), "_email_contact.tpl", Vars, Context),
-    z_render:update("contact-form", "<p>The form has been submitted! Thank you, we'll get in touch soon.</p>", Context).

File priv/sites/default/resources/resource_default_postcomment.erl

-%% @author author <author@example.com>
-%% @copyright YYYY author.
-%% @doc Example webmachine_resource.
-
--module(resource_default_postcomment).
--export([event/2]).
-
--include_lib("zotonic.hrl").
-
-event({submit, postcomment, _TriggerId, _TargetId}, Context) ->
-	?DEBUG(z_context:get_q_all(Context)),
-    {Html, Context1} = z_template:render_to_iolist("_article_comments.tpl",[], Context),
-    z_render:update("comments", Html, Context1).

File priv/sites/default/templates/_article_chapeau.tpl

-{% with id|menu_trail as parents %}
-{% if parents %}
-<h5 class="chapeau">
-    {% for p in parents %}
-    <a href="{{ m.rsc[p].page_url }}">{{ m.rsc[p].title }}</a>
-    {% if not forloop.last %}&raquo;{% endif %}
-    {% endfor %}
-</h5>
-{% endif %}
-{% endwith %}

File priv/sites/default/templates/_article_keywords.tpl

-{% with m.rsc[id].o.subject as tags %}
-	{% if tags %}
-		<p class="keywords">
-		    Keywords: 
-		    {% for id in tags %}
-			    <a href="{{ m.rsc[id].page_url }}">{{ m.rsc[id].title }}</a>{% if not forloop.last %},{% endif %}
-		    {% endfor %}
-		</p>
-	{% endif %}
-{% endwith %}

File priv/sites/default/templates/_article_meta.tpl

-<p class="article-meta">Posted on {{ m.rsc[id].publication_start|date:"d F Y"}}
-{% if m.rsc[id].author.id %}by {{ m.rsc[id].author.title }}{% endif %}
-</p>

File priv/sites/default/templates/_article_prevnext.tpl

-{% cache 3600 cat='article' vary=id %}
-
-<div class="prevnext">
-
-    {% for id in m.search[{next cat='article' id=id pagelen=1}] %}
-	    <div class="next">
-    	    <a href="{{ m.rsc[id].page_url }}" title="{{ m.rsc[id].title }}">Next post &raquo;</a>
-	    </div>
-    {% endfor %}
-
-    {% for id in m.search[{previous cat='article' id=id pagelen=1}] %}
-    	<div class="prev">
-        	<a href="{{ m.rsc[id].page_url }}" title="{{ m.rsc[id].title }}">&laquo; Previous post</a>
-	    </div>
-    {% endfor %}
-
-</div>
-
-{% endcache %}

File priv/sites/default/templates/_article_sidebar.tpl

-{% include "_article_keywords.tpl" %}
-
-{% with m.rsc[id].media|without_embedded_media:id as media %} 
-	{% if media %}
-		<ul class="images-list">
-			{% for m in media %}
-				<li>
-                    {% include "_body_media.tpl" width=315 align="block" %}
-				</li>
-			{% endfor %}
-		</ul>
-	{% endif %}	
-{% endwith %}
-
-{% if m.rsc[id].is_editable %}
-	{% button text=_"edit this page" action={redirect dispatch="admin_edit_rsc" id=id} %}
-{% endif %}

File priv/sites/default/templates/_article_summary.tpl

-{% if big %}
-
-	<section class="post clearfix">
-
-		<h1><a href="{{m.rsc[id].page_url }}" title="{{ m.rsc[id].title }}">{{ m.rsc[id].title }}</a></h1>
-		{% include "_article_meta.tpl" id=id %}
-
-		{% ifequal m.rsc[id].media[1].mime "text/html-video-embed" %}
-			<section class="video-wrapper clearfix">
-				{% media m.rsc[id].media[1] %}
-			</section>
-		{% else %}
-			<figure class="image-wrapper block-level-image clearfix">
-				<a href="{{m.rsc[id].page_url }}" title="{{ m.rsc[id].title }}">
-					{% media m.rsc[id].media[1] width=445 height=180 crop alt=m.rsc[id].title %}
-				</a>
-			</figure>	
-		{% endifequal %}
-			
-		<p class="important">
-			{{ id|summary:300 }} <a href="{{ m.rsc[id].page_url }}">Read&nbsp;more&nbsp;&raquo;</a>
-		</p>
-
-	
-	</section>
-	
-{% else %}
-	
-	<section class="post clearfix">
-		<a href="{{m.rsc[id].page_url }}" title="{{ m.rsc[id].title }}">
-			{% image m.rsc[id].media[1] height=108 width=120 crop %}
-		</a>
-		<h1><a href="{{m.rsc[id].page_url }}">{{ m.rsc[id].title }}</a></h1>
-		{% include "_article_meta.tpl" id=id %}
-		<p class="summary">
-			{{ m.rsc[id].summary|default:m.rsc[id].body|striptags|truncate:100 }} <a href="{{ m.rsc[id].page_url }}">Read&nbsp;more&nbsp;&raquo;</a>
-		</p>
-	</section>
-
-{% endif %}	

File priv/sites/default/templates/_body_media.tpl

-{% ifequal align "block" %}
-	{% ifequal m.rsc[id].medium.mime "text/html-video-embed" %}
-		<section class="video-wrapper">
-			{% media m.rsc[id].medium %}
-		</section>
-	{% else %}
-		<figure class="image-wrapper block-level-image">
-			{% media m.rsc[id].medium width=size.width|default:width height=size.height|default:height crop=crop class=align link=link alt=m.rsc[id].title %}
-            {% with id|summary as summary %}{% if summary %}<p class="image-caption">{{ summary }}</p>{% endif %}{% endwith %}
-		</figure>	
-	{% endifequal %}
-{% else %}
-	{% media m.rsc[id].medium width=size.width|default:width height=size.height|default:height crop=crop class=align link=link alt=m.rsc[id].title %}
-{% endifequal %}

File priv/sites/default/templates/_email_contact.tpl

-<html>
-    <head>
-        <title>{{ name|escape }} - Contact form</title>
-    </head>
-    <body>
-        <p>Hello, the contact form of the site has been submitted.</p>
-
-        <p>Name: {{ name|escape }}</p>
-        <p>E-mail: {{ mail|escape }}</p>
-
-        <p>The contents of the message was this:</p>
-        <pre>{{ message|force_escape|linebreaksbr }}</pre>
-
-        <p>Regards, your website.</p>
-    </body>
-</html>

File priv/sites/default/templates/_listitem.tpl

-<li class="listitem">
-    <h3><a href="{{ m.rsc[id].page_url }}">{{ m.rsc[id].title }}</a></h3>
-    {{ m.rsc[id].summary }} 
-</li>

File priv/sites/default/templates/_sidebar.tpl

-{# Cache the sidebar, depending on the stuff in the 'article' category #}
-{% cache 3600 cat='article' %}
-	
-	{% if m.category.tweet %}
-	
-		{% with m.search[{latest cat='tweet' pagelen=4}] as r %}
-			{% if r.result %}
-				<h2>Tweets</h2>
-				<ul class="shouts-list">
-					{% for tw in r.result %}
-						<li>
-							<p>
-								<img width="28" height="28" src="{{ m.rsc[tw].tweet['user'][2]['profile_image_url'] }}" />
-								<span class="tweet-body">{{ m.rsc[tw].body|twitter }}</span>
-								<span class="tweet-date-time">from {{ m.rsc[tw].tweet["source"] }} by {{ m.rsc[tw].tweet['user'][2]['screen_name'] }}</span>
-							</p>
-						</li>
-					{% endfor %}
-				</ul>
-			{% endif %}
-		{% endwith %}
-	
-	{% endif %}
-	
-	<h2>Archive</h2>
-    <ul class="simple-list">
-		{% for year, months in m.search[{archive_year_month cat='article'}] %}
-	    	<li><a class="caption" href="{% url archives_y year=year %}">{{ year }}</a>
-                <ul>
-                    {% for row in months %}
-                    <li><a href="{% url archives_m year=year month=row.month %}">{{ row.month_as_date|date:"F" }}</a> ({{ row.count }}){% if not forloop.last %},{% else %}.{% endif %}</li>
-                    {% endfor %}
-                </ul>
-            </li>
-	    {% endfor %}
-    </ul>
-	
-    <h2>Keywords</h2>
-    <ul class="inline-list clearfix">
-	    {% for id, count in m.search[{keyword_cloud cat='article'}] %}
-        <li><a href="{{ m.rsc[id].page_url }}">{{ m.rsc[id].title }}</a> ({{ count }}){% if not forloop.last %},{% else %}.{% endif %}</li>
-	    {% endfor %}
-    </ul>
-
-{% endcache %}
-
-{% if m.rsc[id].is_editable %}
-	{% button text=_"edit this page" action={redirect dispatch="admin_edit_rsc" id=id} %}
-{% endif %}

File priv/sites/default/templates/archives.tpl

-{% extends "base.tpl" %}
-
-{% block title %}Archives{% endblock %}
-
-{% block chapeau %}
-	<h5 class="chapeau">Archives for {% if q.month %}{{ q.month }}, {% endif %}{{ q.year }}</h5>
-{% endblock %}
-
-{% block content %}
-	
-	{% with m.search.paged[{query publication_year=q.year publication_month=q.month sort='-publication_start' cat=cat page=q.page pagelen=m.config.site.pagelen.value}] as result %}
-		
-		{% for id in result %}
-			
-			{% include "_article_summary.tpl" id=id %}
-		
-		{% endfor %}
-	
-		{% pager result=result dispatch=zotonic_dispatch year=q.year month=q.month %}
-
-	{% endwith %}
-
-{% endblock %}

File priv/sites/default/templates/article.tpl

-{% extends "page.tpl" %}
-
-{% block title %}{{ m.rsc[id].title }}{% endblock %}
-
-{% block chapeau %}
-
-	{% include "_article_chapeau.tpl" %}
-
-{% endblock %}
-
-{% block content %}
-
-    <h1>{{ m.rsc[id].title }}</h1>
-
-    {% if m.rsc[id].summary %}
-    <p class="summary">
-        {{ m.rsc[id].summary }}
-    </p>
-    {% endif %}
-
-    {{ m.rsc[id].body|show_media }}
-
-	<section id="comments">{% include "_comments.tpl" id=id %}</section>
-	{% include "_article_prevnext.tpl" id=id %}
-
-{% endblock %}
-
-{% block sidebar %}
-	{% include "_article_sidebar.tpl" %}
-{% endblock %}

File priv/sites/default/templates/base.tpl

-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<title>{% block title %}{% endblock %} &mdash; {{ m.config.site.title.value }}</title>
-
-	<!--
-		Website built by:
-		YOUR NAME HERE
-
-		Proudly powered by: Zotonic, the Erlang CMS <http://www.zotonic.com>
-	-->
-
-	<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
-	<meta name="author" content="YOUR NAME HERE &copy; 2009" />
-
-	{% all include "_html_head.tpl" %}
-
-	{% lib "css/zp-compressed.css" "css/zp-project.css" "css/zp-menu.css" "css/jquery.loadmask.css"  %}
-	<!--[if IE]>{% lib "css/zp-ie.css" %}<![endif]-->
-	{% lib "js/apps/modernizr.js" %}
-	{% block html_head_extra %}{% endblock %}
-</head>
-<body class="{% block page_class %}page{% endblock %}">
-
-	<section class="skip">
-		<a href="#content-area" title="Go directly to page content">Go to page content</a>
-	</section>
-
-    <section class="zp-wrapper">
-
-        <header class="clearfix">
-        	<h1 class="left"><a href="/">{{ m.config.site.title.value }} {% if m.config.site.subtitle.value %}<span>{{ m.config.site.subtitle.value }}</span>{% endif %}</a></h1>
-        </header>
-        <nav class="clearfix">
-            {% menu id=id %}
-        </nav>
-
-        <section id="content-area" class="clearfix">
-
-			{% block content_area %}
-			{% block chapeau %}{% endblock %}
-
-            <article id="content" class="zp-65">
-                <div class="padding">
-                    {% block content %}
-						<!-- The default content goes here. -->
-                    {% endblock %}
-                </div>
-            </article>
-
-            <section id="sidebar" class="zp-35 last">
-                {% block sidebar %}
-					{% include "_sidebar.tpl" %}
-    	        {% endblock %}
-            </section>
-
-			{% endblock %}
-
-        </section>
-
-        <footer class="clearfix">
-			<nav class="left">{% menu id=id menu_id='footer_menu' %}</nav>
-			<section class="right">
-				<p class="footer-blog-title">Website powered by <a href="http://zotonic.com">Zotonic</a>, the Erlang CMS.</p>
-			</section>
-		</footer>
-
-    </section>
-
-	{% include "_js_include_jquery.tpl" %}
-    {% lib 
-			"js/apps/zotonic-1.0.js" 
-			"js/apps/z.widgetmanager.js" 
-			"js/modules/livevalidation-1.3.js" 
-			"js/modules/z.inputoverlay.js"
-			"js/modules/jquery.loadmask.js"
-            "js/z.superfish.js" 
-	%}
-	
-	{% block _js_include_extra %}{% endblock %}
-
-    <script type="text/javascript">
-        $(function() { $.widgetManager(); });
-    </script>
-
-	{% stream %}
-    {% script %}
-
-    {% all include "_html_body.tpl" %}
-</body>
-</html>

File priv/sites/default/templates/by_keyword.tpl

-{% extends "base.tpl" %}
-
-{% block title %}Articles for "{{ m.rsc[q.id].title }}"{% endblock %}
-
-{% block chapeau %}
-	<h5 class="chapeau">Articles about: {{ m.rsc[q.id].title }}</h5>
-{% endblock %}
-
-{% block content %}
-
-	{% with m.search.paged[{referrers id=q.id page=q.page pagelen=m.config.site.pagelen.value}] as result %}
-	
-		{% for id, predicate in result %}
-			{% include "_article_summary.tpl" id=id %}
-		{% endfor %}
-		
-		{% pager result=result dispatch='keyword' id=id slug=m.rsc[id].slug %}
-	
-	{% endwith %}
-
-{% endblock %}
-
-{% block sidebar %}
-	{% include "_sidebar.tpl" show_cloud=1 %}
-{% endblock %}

File priv/sites/default/templates/contact.tpl

-{% extends "page.tpl" %}
-
-{% block below_body %}
-
-{% wire id="contact-form" type="submit" postback={contact} delegate="resource_default_contact" %}
-<form id="contact-form" method="post" action="postback">
-
-  	<div class="form-item">
-		<label for="name">Name</label>
-    	<input type="text" name="name" id="name" />
-   	</div>
-
-	<div class="form-item">
-		<label for="email">E-mail</label>
-    	<input type="text" name="mail" id="mail" />
-    	{% validate id="mail" type={email} type={presence} %}
-	</div>
-	
-	<div class="form-item">
-	    <label for="message">Message</label>
-	    <textarea name="message" id="message" cols="60" rows="8"></textarea>
-    	{% validate id="message" type={presence} %}
-	</div>
-
-    <button type="submit">Send</button>
-
-</form>
-
-{% endblock %}

File priv/sites/default/templates/home.tpl

-{% extends "base.tpl" %}
-
-{% block title %}{{ m.rsc[id].title }}{% endblock %}
-
-{% block content %}
-
-	{% if m.rsc[id].is_featured %}
-	
-		<h1>{{ m.rsc[id].title }}</h1>
-		<p class="summary">{{ id|summary }}</p>
-	
-		{% for id in m.rsc[id].media %}
-           {% include "_body_media.tpl" width=445 crop=1 align="block" %}
-		{% endfor %}
-
-	{% endif %}
-
-	{% with m.search[{query cat='article' sort='-publication_start' pagelen=m.config.site.pagelen.value}] as result %}
-
-		<div id="list-articles">
-			{% for id in result %}
-				{% include "_article_summary.tpl" id=id big=forloop.first %}
-			{% endfor %}
-		</div>
-
-        {% ifequal m.config.site.pagelen.value result|length %}
-			{% wire id="more-results" action={moreresults result=result target="list-articles" template="_article_summary.tpl"} %}
-			<p><a href="javascript:void(0);" id="more-results">More results...</a></p>
-        {% endifequal %}
-	{% endwith %}
-
-{% endblock %}

File priv/sites/default/templates/page.query.tpl

-{% extends "page.tpl" %}
-
-{% block below_body %}
-
-	{% with m.search.paged[{query query_id=id page=q.page pagelen=6}] as result %}
-		
-		<ul class="list query-list clearfix">
-		
-		    {% for id in result %}
-	    		{% catinclude "_listitem.tpl" id %}
-		    {% endfor %}
-		</ul>
-
-		{% pager result=result dispatch="page" id=id %}
-
-	{% endwith %}
-
-{% endblock %}

File priv/sites/default/templates/page.tpl

-{% extends "base.tpl" %}
-
-{% block title %}{{ m.rsc[id].title }}{% endblock %}
-
-{% block chapeau %}
-
-	{% include "_article_chapeau.tpl" %}
-
-{% endblock %}
-
-
-{% block content %}
-
-    <h1>{{ m.rsc[id].title }}</h1>
-
-    {% if m.rsc[id].summary %}
-    <p class="summary">
-        {{ m.rsc[id].summary }}
-    </p>
-    {% endif %}
-
-    {% if m.rsc[id].medium %}
-    	<figure class="image-wrapper block-level-image">
-			{% media m.rsc[id].medium width=445 crop class=align alt=m.rsc[id].title %}
-		</figure>
-    {% endif %}
-
-    {{ m.rsc[id].body|show_media }}
-
-	{% block below_body %}{% endblock %}
-
-
-{% with m.search.paged[{query hassubject=[id, 'haspart']  sort='seq' pagelen=1 page=q.page}] as result %}
-{% for id in result %}
-
-{{ m.rsc[id].title }}
-
-{% endfor %}
-{% pager result=result dispatch='page' id=id %}
-
-{% endwith %}
-
-{% endblock %}

File priv/sites/default/translations/nl.po

-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-# NB: Consider using poEdit <http://poedit.sourceforge.net>
-#
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2010-05-18 16:45+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: esmb_gettext.erl:13 
-msgid ""
-"Hello World"
-msgstr ""
-"Hallo Wereld"

File priv/sites/default/translations/template/en.pot

-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-# NB: Consider using poEdit <http://poedit.sourceforge.net>
-#
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ./priv/sites/default/templates/_sidebar.tpl:49 ./priv/sites/default/templates/_article_sidebar.tpl:25 
-msgid ""
-"edit this page"
-msgstr ""
-"edit this page"