darthapo-stratus 0.3 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/Changelog +41 -0
  2. data/Manifest +15 -36
  3. data/Readme.markdown +4 -0
  4. data/examples/dev-blog/config/defaults/{article.html → article.default.html} +0 -0
  5. data/{test/fixtures/site → examples/dev-blog}/config/defaults/page.default.html +0 -0
  6. data/examples/dev-blog/config/defaults/{page.html → post.default.html} +0 -0
  7. data/examples/dev-blog/themes/default/styles/main.css +1 -1
  8. data/examples/dev-blog/themes/default/templates/posts/content.html +4 -5
  9. data/lib/stratus.rb +1 -0
  10. data/lib/stratus/filters.rb +35 -1
  11. data/lib/stratus/generator/builder.rb +32 -8
  12. data/lib/stratus/generator/context.rb +28 -25
  13. data/lib/stratus/generator/renderer.rb +5 -2
  14. data/lib/stratus/logging.rb +28 -2
  15. data/lib/stratus/resources.rb +4 -2
  16. data/lib/stratus/resources/base.rb +15 -5
  17. data/lib/stratus/resources/content.rb +3 -1
  18. data/lib/stratus/tasks/app/boilerplate/config/content.yaml +19 -0
  19. data/lib/stratus/tasks/app/boilerplate/config/site.yaml +5 -11
  20. data/lib/stratus/tasks/app/boilerplate/content/pages/home/index.html +12 -16
  21. data/lib/stratus/tasks/app/boilerplate/content/posts/001_welcome/index.html +37 -0
  22. data/lib/stratus/tasks/app/boilerplate/content/posts/002_getting-started/index.html +37 -0
  23. data/lib/stratus/tasks/app/boilerplate/themes/default/images/footer-bg.png +0 -0
  24. data/lib/stratus/tasks/app/boilerplate/themes/default/images/page-bg.png +0 -0
  25. data/lib/stratus/tasks/app/boilerplate/themes/default/scripts/site.js +1 -0
  26. data/lib/stratus/tasks/app/boilerplate/themes/default/styles/main.css +99 -2
  27. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/layouts/main.html +18 -11
  28. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/{objects/page.html → pages/content.html} +9 -1
  29. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/pages/feed.xml +25 -0
  30. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/{objects/page.index.html → pages/list.html} +1 -1
  31. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/posts/content.html +19 -0
  32. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/posts/feed.xml +25 -0
  33. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/posts/list.html +14 -0
  34. data/lib/stratus/tasks/site/site.rake +5 -0
  35. data/lib/stratus/version.rb +1 -1
  36. data/stratus.gemspec +3 -3
  37. metadata +17 -38
  38. data/examples/dev-blog/config/defaults/content.html +0 -7
  39. data/examples/dev-blog/config/defaults/post.html +0 -10
  40. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/objects/post.html +0 -22
  41. data/lib/stratus/tasks/app/boilerplate/themes/default/templates/objects/post.index.html +0 -10
  42. data/test/fixtures/site/StratusSite +0 -26
  43. data/test/fixtures/site/config/defaults/article.default.html +0 -7
  44. data/test/fixtures/site/config/defaults/content.default.html +0 -7
  45. data/test/fixtures/site/config/defaults/post.default.html +0 -10
  46. data/test/fixtures/site/config/site.yaml +0 -36
  47. data/test/fixtures/site/content/articles/001_im-the-title/index.html +0 -10
  48. data/test/fixtures/site/content/pages/about/index.html +0 -7
  49. data/test/fixtures/site/content/pages/home/index.html +0 -37
  50. data/test/fixtures/site/content/pages/projects/index.html +0 -6
  51. data/test/fixtures/site/content/posts/001_new-blog/dom.js +0 -123
  52. data/test/fixtures/site/content/posts/001_new-blog/index.html +0 -24
  53. data/test/fixtures/site/content/posts/001_new-blog/old.html +0 -18
  54. data/test/fixtures/site/content/posts/002_fun-for-the-whole-family/index.html +0 -12
  55. data/test/fixtures/site/content/posts/002_fun-for-the-whole-family/snippet_one.rb +0 -5
  56. data/test/fixtures/site/content/posts/003_life-is-quite-fun-really/index.html +0 -12
  57. data/test/fixtures/site/themes/default/scripts/code_highlighter.js +0 -188
  58. data/test/fixtures/site/themes/default/scripts/code_syntax.js +0 -92
  59. data/test/fixtures/site/themes/default/styles/code_syntax.css +0 -68
  60. data/test/fixtures/site/themes/default/styles/main.css +0 -66
  61. data/test/fixtures/site/themes/default/templates/layouts/main.html +0 -36
  62. data/test/fixtures/site/themes/default/templates/objects/article.html +0 -7
  63. data/test/fixtures/site/themes/default/templates/objects/article.index.html +0 -8
  64. data/test/fixtures/site/themes/default/templates/objects/feed.xml +0 -25
  65. data/test/fixtures/site/themes/default/templates/objects/page.html +0 -7
  66. data/test/fixtures/site/themes/default/templates/objects/page.index.html +0 -10
  67. data/test/fixtures/site/themes/default/templates/objects/post.html +0 -22
  68. data/test/fixtures/site/themes/default/templates/objects/post.index.html +0 -10
@@ -4,7 +4,9 @@ class Content < Base
4
4
 
5
5
  def validate!
6
6
  raise StandardError.new("Posts must have a publish-date! #{content_path}") if (!metadata.has_key?(:publish_date) and collection_type == 'posts')
7
- true
7
+ # pp self
8
+ # return false if it's future dated...
9
+ [(metadata[:publish_date] < Time.now), "Publish date is in the future..."]
8
10
  end
9
11
 
10
12
  def full_path
@@ -0,0 +1,19 @@
1
+ default:
2
+ local_slug: 'index' # index | date | none
3
+ slug_format: '###'
4
+ sort: 'index'
5
+ reverse: false
6
+ feed: true
7
+
8
+ # Override per content type
9
+
10
+ pages:
11
+ sort: 'title'
12
+ local_slug: 'none'
13
+
14
+ posts:
15
+ local_slug: 'index'
16
+ remote_slug: 'date'
17
+ slug_format: '%Y-%m-%d'
18
+ sort: 'publish_date'
19
+ reverse: true
@@ -4,6 +4,11 @@ site:
4
4
  theme: "default"
5
5
  copyright: "&copy; 2008 Me. All rights reserved."
6
6
  homepage: "pages/home"
7
+ base_url: "http://my.site"
8
+ theme: "default"
9
+ author:
10
+ name: "Me"
11
+ email: "my@email.com"
7
12
 
8
13
  generator:
9
14
  output: 'www'
@@ -12,16 +17,5 @@ generator:
12
17
  cleanup_tags: true
13
18
  force_xhtml: false
14
19
 
15
- content:
16
- local_slug: 'index' # index | date | none
17
- slug_format: '###'
18
-
19
- pages:
20
- local_slug: 'none'
21
-
22
- posts:
23
- remote_slug: 'date'
24
- slug_format: '%Y-%m-%d'
25
-
26
20
  stratus: # Don't touch this section!
27
21
  version: 0.3
@@ -1,35 +1,31 @@
1
1
  <head>
2
2
  <title>Welcome!</title>
3
3
  <meta name="layout" content="main"/>
4
+ <meta name="skip_wrapper" content="true" type="bool"/>
4
5
  </head>
5
6
  <body>
6
- <h1>Blog Entries:</h1>
7
7
  <div class="home">
8
8
 
9
9
  {% for post in posts limit:1 %}
10
10
  <div class="post summary">
11
11
  <h2>{{ post.title }}</h2>
12
+ <div class="meta">Published on {{ post.publish_date | short_date }}.</div>
12
13
  <div class="body">
13
14
  {{ post.summary }}
14
15
  <p><a href="{{ post | uri_rel }}">Read more...</a></p>
15
16
  </div>
16
- <div class="meta">Published on {{ post.publish_date | short_date }}.</div>
17
17
  </div>
18
18
  {% endfor %}
19
-
20
- </div>
21
-
22
- <div class="archive">
23
- <h3>Recently:</h3>
24
-
25
- {% for post in posts limit:5 offset:1 %}
26
- <div class="post summary">
27
- <h4>
28
- <a href="{{ post | uri_rel }}">{{ post.title }}</a>
29
- <span class="meta">{{ post.publish_date | short_date }}</span>
30
- </h4>
31
- </div>
32
- {% endfor %}
19
+
20
+ <h3>Recently...</h3>
21
+ <ul class="post-list">
22
+ {% for post in posts limit:5 offset:1 %}
23
+ <li class="post">
24
+ <span class="meta">{{ post.publish_date | short_date }}</span>
25
+ <a href="{{ post | uri }}">{{ post.title }}</a>
26
+ </li>
27
+ {% endfor %}
28
+ </ul>
33
29
 
34
30
  </div>
35
31
  </body>
@@ -0,0 +1,37 @@
1
+ <head>
2
+ <title>Welcome!</title>
3
+ <meta name="publish-date" content="2008-12-18 20:06"/>
4
+ </head>
5
+ <summary>
6
+ <p>Hello, and welcome to your new stratus site!</p>
7
+ </summary>
8
+ <body>
9
+ {% markdown %}
10
+ Here's some things to keep in mind:
11
+
12
+ * The homepage is under `pages/home`
13
+ * You can create new collections of content via:
14
+
15
+ stratus new:collection COLLECTION_NAME
16
+
17
+ * You can adjust the settings (for feeds, default sorting, and sluglines) in `config/content.yaml`
18
+ * You specify the site's title, subtitle, author, url and more in `config/site.yaml`
19
+ * If you want to customize the default (boilerplate) content that's created you can modify the templates in `config/defaults/COLLECTION_TYPE.html`
20
+ * The `StratusSite` file is actually a Rakefile, so you can add your own tasks there
21
+
22
+ ### Some Helpful Tags/Filters
23
+
24
+ Liquid is used for the templating system. Stratus comes with a few custom tags and filters to help out.
25
+
26
+ `sourcecode`
27
+ : Both a tag and filter. If used as a tag, you can specify the language type. If used as a filter and you specify an attachment, it'll put it's contents inline. It's built for use with [CodeHighlighter][].
28
+
29
+ `uri`
30
+ : Generates a URI for the specified content object or collection.
31
+
32
+ `url`
33
+ : Generates a full URL (based on the url defined in `config/site.yaml`) for the specified content object or collection.
34
+
35
+ [CodeHighlighter]: http://
36
+ {% endmarkdown %}
37
+ </body>
@@ -0,0 +1,37 @@
1
+ <head>
2
+ <title>Getting Started</title>
3
+ <meta name="publish-date" content="2008-12-18 20:00"/>
4
+ </head>
5
+ <summary>
6
+ <p>Hello, and welcome to your new stratus site!</p>
7
+ </summary>
8
+ <body>
9
+ {% markdown %}
10
+ Here's some things to keep in mind:
11
+
12
+ * The homepage is under `pages/home`
13
+ * You can create new collections of content via:
14
+
15
+ stratus new:collection COLLECTION_NAME
16
+
17
+ * You can adjust the settings (for feeds, default sorting, and sluglines) in `config/content.yaml`
18
+ * You specify the site's title, subtitle, author, url and more in `config/site.yaml`
19
+ * If you want to customize the default (boilerplate) content that's created you can modify the templates in `config/defaults/COLLECTION_TYPE.html`
20
+ * The `StratusSite` file is actually a Rakefile, so you can add your own tasks there
21
+
22
+ ### Some Helpful Tags/Filters
23
+
24
+ Liquid is used for the templating system. Stratus comes with a few custom tags and filters to help out.
25
+
26
+ `sourcecode`
27
+ : Both a tag and filter. If used as a tag, you can specify the language type. If used as a filter and you specify an attachment, it'll put it's contents inline. It's built for use with [CodeHighlighter][].
28
+
29
+ `uri`
30
+ : Generates a URI for the specified content object or collection.
31
+
32
+ `url`
33
+ : Generates a full URL (based on the url defined in `config/site.yaml`) for the specified content object or collection.
34
+
35
+ [CodeHighlighter]: http://
36
+ {% endmarkdown %}
37
+ </body>
@@ -0,0 +1 @@
1
+ // You can put your own custom js functions here...
@@ -1,12 +1,109 @@
1
1
  /*
2
- Just a default CSS file -- blow it away and start fresh!
2
+ Just a default CSS file -- Feel free to blow it away and start fresh!
3
3
  */
4
4
 
5
+ /** {
6
+ margin: 0px;
7
+ padding: 0px;
8
+ vertical-align: middle;
9
+ }
10
+ */
11
+ HTML {
12
+ background-color: #C4D0DB;
13
+ margin: 0px;
14
+ padding: 0px;
15
+ }
16
+
5
17
  BODY {
18
+ background: #FFF url(../images/page-bg.png) top left repeat-x;
6
19
  font-family: tahoma, sans-serif;
20
+ text-align: center;
21
+ margin: 0px;
22
+ padding: 0px;
23
+ }
24
+
25
+ h1, h2, h3, h4, h5, h6 {
26
+ margin-bottom: 0px;
27
+ padding-bottom: 0px;
28
+ font-family: Georgia, Sans-Serif;
7
29
  }
8
30
 
9
31
  .page-container {
10
32
  width: 700px;
11
33
  margin: 0 auto;
12
- }
34
+ text-align: left;
35
+ }
36
+
37
+ #header {
38
+ padding-top: 15px;
39
+ font-family: Georgia, Sans-Serif;
40
+ }
41
+ #header h1 {
42
+ text-align: center;
43
+ font-size: 72px;
44
+ font-weight: normal;
45
+ color: #999999;
46
+ margin: 0px;
47
+ padding: 0px;
48
+ }
49
+ #header h1 span {
50
+ color: #666666;
51
+ }
52
+ #header .subtitle {
53
+ text-align: center;
54
+ font-size: 11px;
55
+ color: #666;
56
+ }
57
+ #header .subtitle A {
58
+ color: #666;
59
+ }
60
+
61
+ #sidebar {
62
+ width: 150px;
63
+ background: #F0F0F0;
64
+ border: 1px solid #DDD;
65
+ float: left;
66
+ -webkit-border-radius: 10px;
67
+ -moz-border-radius: 10px;
68
+ }
69
+
70
+ #contents {
71
+ margin-left: 175px;
72
+ }
73
+ .post .meta {
74
+ color: #999;
75
+ font-size: 85%;
76
+ font-weight: normal;
77
+ }
78
+ .post-list {
79
+ list-style: none;
80
+ margin: 0px;
81
+ padding: 10px 0px;
82
+ }
83
+ LI.post {
84
+ list-style: none;
85
+ margin: 0px;
86
+ padding: 5px;
87
+ }
88
+ LI.post .meta {
89
+ display: inline-block;
90
+ width: 100px;
91
+ text-align: right;
92
+ }
93
+
94
+ #footer {
95
+ clear: both;
96
+ margin-top: 25px;
97
+ padding-top: 25px;
98
+ background: #C4D0DB url(../images/footer-bg.png) top left repeat-x;
99
+ font-size: 13px;
100
+ color: #495E72;
101
+ height: 125px;
102
+ }
103
+ #footer .page-container {
104
+ text-align: center;
105
+ }
106
+ #footer a {
107
+ padding: 5px 0px;
108
+ color: #495E72;
109
+ }
@@ -4,27 +4,34 @@
4
4
  <head>
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
6
6
  <title>{{ site.title }}</title>
7
- <link rel="stylesheet" href="{{ 'theme/styles/main.css' | uri_rel }}" type="text/css" media="screen" charset="utf-8"/>
7
+ <link rel="stylesheet" href="/theme/styles/main.css" type="text/css" media="screen" charset="utf-8"/>
8
+ <script src="/theme/scripts/site.js" type="text/javascript" charset="utf-8"></script>
9
+ <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="/posts/feed.xml" />
8
10
  {{ this.head }}
9
11
  </head>
10
- <body>
11
- <div class="page-container">
12
- <div class="header">
12
+ <body class="{{ this.collection_type }}">
13
+ <div id="header">
14
+ <div class="page-container">
13
15
  <h1>{{ site.title }}</h1>
14
16
  <div class="subtitle">
15
17
  {{ site.subtitle }}
16
18
  </div>
17
19
  </div>
18
- <div class="navigation">
19
- <a href="{{ page.home | uri_rel }}">Home</a>
20
- ::
21
- <a href="{{ posts | uri_rel }}">Archive</a>
20
+ </div>
21
+ <div class="page-container">
22
+ <div id="sidebar">
23
+ <ul class="navigaiton">
24
+ <li><a href="{{ page.home | uri }}">Home</a></li>
25
+ <li><a href="{{ posts | uri }}">Archive</a></li>
26
+ </ul>
22
27
  </div>
23
- <div class="contents">
28
+ <div id="contents">
24
29
  {{ content }}
25
30
  </div>
26
- <div class="footer">
27
- {{ site.copyright }}
31
+ </div>
32
+ <div id="footer">
33
+ <div class="page-container">
34
+ {{ site.copyright }} Sited generated with <a href="http://darthapo.github.com/stratus">Stratus</a>
28
35
  </div>
29
36
  </div>
30
37
  </body>
@@ -1,7 +1,15 @@
1
1
  <meta name="layout" content="main"/>
2
+ {% unless this.skip_wrapper %}
3
+
2
4
  <div class="page">
3
5
  <h2>{{ this.title }}</h2>
4
6
  <div class="body">
5
7
  {{ this.body }}
6
8
  </div>
7
- </div>
9
+ </div>
10
+
11
+ {% else %}
12
+
13
+ {{ this.body }}
14
+
15
+ {% endunless %}
@@ -0,0 +1,25 @@
1
+ <meta name="layout" content=""/>
2
+ <?xml version="1.0" encoding="utf-8"?>
3
+ <feed xmlns="http://www.w3.org/2005/Atom">
4
+
5
+ <title>{{ site.title }}</title>
6
+ <link href="{{ '/pages/feed.xml' | url }}" rel="self"/>
7
+ <link href="{{ '' | url }}/"/>
8
+ <updated>{{ site.time | date_to_xmlschema }}</updated>
9
+ <id>{{ '' | url }}/</id>
10
+ <author>
11
+ <name>{{ site.author.name }}</name>
12
+ <email>{{ site.author.email }}</email>
13
+ </author>
14
+
15
+ {% for content in pages %}
16
+ <entry>
17
+ <title>{{ content.title }}</title>
18
+ <link href="{{ content | url }}"/>
19
+ <updated>{{ content.publish_date | date_to_xmlschema }}</updated>
20
+ <id>{{ content | url }}</id>
21
+ <content type="html">{{ content.summary | xml_escape }}</content>
22
+ </entry>
23
+ {% endfor %}
24
+
25
+ </feed>
@@ -3,7 +3,7 @@
3
3
  {% for page in pages %}
4
4
  {% unless page.is_homepage %}
5
5
  <div class="page summary">
6
- <h2><a href="{{ page | uri_rel }}">{{ page.title }}</a></h2>
6
+ <h2><a href="{{ page | uri }}">{{ page.title }}</a></h2>
7
7
  </div>
8
8
  {% endunless %}
9
9
  {% endfor %}
@@ -0,0 +1,19 @@
1
+ <meta name="layout" content="main"/>
2
+ <div class="post">
3
+ <h2>{{ this.title }}</h2>
4
+ <div class="meta">
5
+ Published on {{ this.publish_date | short_date }}.
6
+ </div>
7
+ <div class="body">
8
+ {{ this.body }}
9
+ </div>
10
+ </div>
11
+ <div class="pager">
12
+ {% if this.next %}
13
+ <a href="{{ this.next | uri }}">&laquo; {{ this.next.title }}</a>
14
+ {% endif %}
15
+ <!-- <a href="{{ page.home | uri }}">Home</a> -->
16
+ {% if this.prev %}
17
+ <a href="{{ this.prev | uri }}">{{ this.prev.title }} &raquo;</a>
18
+ {% endif %}
19
+ </div>
@@ -0,0 +1,25 @@
1
+ <meta name="layout" content=""/>
2
+ <?xml version="1.0" encoding="utf-8"?>
3
+ <feed xmlns="http://www.w3.org/2005/Atom">
4
+
5
+ <title>{{ site.title }}</title>
6
+ <link href="{{ '/posts/feed.xml' | url }}" rel="self"/>
7
+ <link href="{{ '' | url }}/"/>
8
+ <updated>{{ site.time | date_to_xmlschema }}</updated>
9
+ <id>{{ '' | url }}/</id>
10
+ <author>
11
+ <name>{{ site.author.name }}</name>
12
+ <email>{{ site.author.email }}</email>
13
+ </author>
14
+
15
+ {% for content in posts %}
16
+ <entry>
17
+ <title>{{ content.title }}</title>
18
+ <link href="{{ content | url }}"/>
19
+ <updated>{{ content.publish_date | date_to_xmlschema }}</updated>
20
+ <id>{{ content | url }}</id>
21
+ <content type="html">{{ content.summary | xml_escape }}</content>
22
+ </entry>
23
+ {% endfor %}
24
+
25
+ </feed>