soxer 0.9.9 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/CHANGES +20 -7
  2. data/README.markdown +1 -1
  3. data/bin/soxer +6 -3
  4. data/lib/soxer/main.rb +2 -2
  5. data/lib/soxer/skel/blog/SETUP.rb +7 -0
  6. data/lib/soxer/skel/blog/app.rb +17 -0
  7. data/lib/soxer/skel/blog/config.ru +25 -0
  8. data/lib/soxer/skel/blog/config.yml +14 -0
  9. data/lib/soxer/skel/blog/content/blog/2009-06-02-meum_est_propositum.yaml +20 -0
  10. data/lib/soxer/skel/blog/content/blog/2010-04-16-ecce_quomdo_moritur_iustus.yaml +20 -0
  11. data/lib/soxer/skel/blog/content/blog/2010-09-06-lorem_ipsum.yaml +20 -0
  12. data/lib/soxer/skel/blog/content/blog/2010-10-12-how_to_spend_your_time_wisely.yaml +20 -0
  13. data/lib/soxer/skel/blog/content/blog/2010-11-24-what_is_where.yaml +38 -0
  14. data/lib/soxer/skel/blog/content/blog.atom.yaml +29 -0
  15. data/lib/soxer/skel/blog/content/categories/index.yaml +51 -0
  16. data/lib/soxer/skel/blog/content/index.yaml +32 -0
  17. data/lib/soxer/skel/blog/public/css/blossom/blossom.jpg +0 -0
  18. data/lib/soxer/skel/blog/public/css/dna/sequence.jpg +0 -0
  19. data/lib/soxer/skel/blog/public/fonts/GeosansLight.ttf +0 -0
  20. data/lib/soxer/skel/blog/public/fonts/trashed.ttf +0 -0
  21. data/lib/soxer/skel/blog/views/_block_about.haml +6 -0
  22. data/lib/soxer/skel/blog/views/_block_categories.haml +12 -0
  23. data/lib/soxer/skel/blog/views/_block_history.haml +23 -0
  24. data/lib/soxer/skel/blog/views/_block_recent.haml +16 -0
  25. data/lib/soxer/skel/blog/views/_doc_docinfo.haml +6 -0
  26. data/lib/soxer/skel/blog/views/_doc_short.haml +10 -0
  27. data/lib/soxer/skel/blog/views/css/blossom/css.sass +155 -0
  28. data/lib/soxer/skel/blog/views/css/common.sass +72 -0
  29. data/lib/soxer/skel/blog/views/css/dna/css.sass +152 -0
  30. data/lib/soxer/skel/blog/views/css/trashed/css.sass +152 -0
  31. data/lib/soxer/skel/blog/views/layout.haml +37 -0
  32. data/lib/soxer/skel/empty/SETUP.rb +3 -0
  33. data/soxer.gemspec +2 -2
  34. metadata +32 -7
  35. data/lib/soxer/skel/empty/bin/EMPTY +0 -0
  36. data/lib/soxer/skel/empty/log/EMPTY +0 -0
  37. data/lib/soxer/skel/empty/public/EMPTY +0 -0
data/CHANGES CHANGED
@@ -1,18 +1,31 @@
1
+ = 0.9.10 / 2011-03-21
2
+
3
+ * The function get_list now returns an array of hashies. This was a severe
4
+ inconsistency.
5
+
6
+ * Fixed incompatibility with Ruby 1.9.2+ where app.rb was called without a
7
+ local path.
8
+
9
+ * Completely rewritten inclusion of empty directories to facilitate a more
10
+ flexible skeleton project creation.
11
+
1
12
  = 0.9.9 / 2011-03-03
2
13
 
3
14
  * Changed the names of Classes to match CamelCase convention in Ruby
4
15
 
5
16
  * Added .eot font to the mime collection to Rack
6
17
 
7
- * Cleaned up the superfuous blocks of documentation.
18
+ * Cleaned up the superfluous blocks of documentation.
8
19
 
9
20
  * Fixed interpretation of layout: 'false' statement, if used inside yaml
10
21
  file.
11
22
 
12
- * Added dependancy on 'hashie' gem. Now page keys can be accessed
23
+ * Added dependency on 'hashie' gem. Now page keys can be accessed
13
24
  as hash keys(strings or symbols) as well as methods.
14
25
  The following will yield the same: page[:date], page['date'], page.date
15
26
 
27
+ * Finally resolved the inclusion of empty directories within skeleton dirs.
28
+
16
29
  = 0.9.8 / 2010-11-28
17
30
 
18
31
  * Standardized and beautified code (no particular standard though.)
@@ -22,7 +35,7 @@
22
35
  * YAML file downloading disabled. This was a severe bug.
23
36
 
24
37
  * Url-to-file routing completely redone, now far more flexible and
25
- extendible, while less error prone.
38
+ extensible, while less error prone.
26
39
 
27
40
  * Atom feed generator completely redone. Not backwards compatible. However,
28
41
  it was not logical and mostly broken anyway.
@@ -33,7 +46,7 @@
33
46
 
34
47
  * Fixed skeleton creation to include empty directories.
35
48
 
36
- * Developement mode output padded with newline. Annoyance only.
49
+ * Development mode output padded with newline. Annoyance only.
37
50
 
38
51
  * get_list now filters list of files: If both 'dir/something.yaml' and
39
52
  'dir/something/index.html' exist, only the first is included.
@@ -48,7 +61,7 @@
48
61
  * Created a README.markdown document
49
62
 
50
63
  * Added sinatra-reloader as dependency, although it's only needed in
51
- developement mode.
64
+ development mode.
52
65
 
53
66
  * Added proper license
54
67
 
@@ -85,13 +98,13 @@
85
98
 
86
99
  * Fixed partial generator so it properly handles strings and symbols
87
100
 
88
- * Cleaned up "soxer test" and only choose "thin" webserver if available.
101
+ * Cleaned up "soxer test" and only choose "thin" web server if available.
89
102
  Defaults to webrick (very slow).
90
103
 
91
104
  = 0.9.4 / 2010-10-27
92
105
 
93
106
  * Added executable 'soxer' to help generating application directories and
94
- running developement versions
107
+ running development versions
95
108
 
96
109
  * Added skeletal directories, and 'empty' skeleton application
97
110
 
data/README.markdown CHANGED
@@ -2,7 +2,7 @@ Soxer, the web publishing tool
2
2
  ==============================
3
3
 
4
4
  [Soxer](http://soxer.mutsu.org) is a document/url centric web publishing
5
- system. It enables the developer to quickly setup, design and deploy any web based project, from quick mockups to complete portals.
5
+ system. It enables the developer to quickly setup, design and deploy any web based project, from quick mock-ups to complete portals.
6
6
 
7
7
  Soxer is distributed under the terms of [GNU General Public License](http://www.gnu.org/licenses/gpl.htm) and is supported by [Formalibre](http://www.formalibre.si).
8
8
 
data/bin/soxer CHANGED
@@ -43,6 +43,7 @@ def help
43
43
 
44
44
  First parameter:
45
45
  #{b 'empty'} - Creates an empty project
46
+ #{b 'blog'} - Creates a simple blog project
46
47
  More project templates are in the making
47
48
 
48
49
  Other parameters:
@@ -75,6 +76,7 @@ end
75
76
 
76
77
  def create template, dir
77
78
  skel = File.dirname(__FILE__)+"/../lib/soxer/skel"
79
+ dest = File.join Dir.pwd, dir
78
80
  case true
79
81
  when template==nil then
80
82
  return err "You did not enter the project type skeleton."
@@ -85,8 +87,10 @@ def create template, dir
85
87
  when File.exist?(dir) then
86
88
  return err "The destination directory exists."
87
89
  else
88
- FileUtils.copy_entry( File.join(skel, template), dir)
89
- FileUtils.rm Dir.glob('**/EMPTY')
90
+ FileUtils.copy_entry( File.join(skel, template), dest)
91
+ require dest+'/SETUP'
92
+ initSkel dest
93
+ FileUtils.rm dest + '/SETUP.rb'
90
94
  return notice "Successfuly created '#{dir}' application directory from '#{template}'."
91
95
  end
92
96
  end
@@ -110,6 +114,5 @@ end
110
114
  # TO COME LATER
111
115
  x = <<END
112
116
  #{b 'corporate'} - Creates a corporate web page mockup
113
- #{b 'blog'} - Creates a blog mockup
114
117
  #{b 'gallery'} - Creates an image gallery mockup
115
118
  END
data/lib/soxer/main.rb CHANGED
@@ -176,9 +176,9 @@ module Sinatra
176
176
  file = FileReader.new
177
177
  file.filename = f
178
178
  if block_given?
179
- f = block.call file.get_content
179
+ f = block.call Hashie::Mash.new( file.get_content )
180
180
  else
181
- f = file.get_content
181
+ f = Hashie::Mash.new file.get_content
182
182
  end
183
183
  end.compact
184
184
  end
@@ -0,0 +1,7 @@
1
+ def initSkel dest
2
+ %w[bin log public].each {|d| Dir.mkdir "#{dest}/#{d}" unless Dir.exists? "#{dest}/#{d}" }
3
+
4
+ Dir.chdir dest+'/content/categories'
5
+ %w[rants recipes tutorials].each {|l| File.symlink 'index.yaml', l+'.yaml' }
6
+ Dir.chdir dest
7
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+ require "rubygems"
3
+ require "sinatra"
4
+ require "soxer"
5
+
6
+ class SoxerApp < Sinatra::Base
7
+ enable :sessions
8
+ before do
9
+ session[:theme] ||= %w[dna blossom][rand 1]
10
+ session[:theme] = params[:theme] if params[:theme]
11
+ end
12
+ get '/blog' do
13
+ redirect '/categories'
14
+ end
15
+
16
+ register Sinatra::Soxer
17
+ end
@@ -0,0 +1,25 @@
1
+ require "rubygems"
2
+ require "sinatra/base"
3
+ require "app"
4
+
5
+ disable :run
6
+ set :server, %w[thin mongrel webrick]
7
+ set :haml, {:format => :html5,
8
+ :attr_wrapper => '"'}
9
+ set :haml, {:encoding => 'utf-8'} if RUBY_VERSION=~/1\.9/
10
+
11
+ configure :development do
12
+ require 'sinatra/reloader'
13
+ set :port, 9394
14
+ end
15
+
16
+ configure :production do
17
+ set :haml, {:ugly => true}
18
+ set :port, 55500
19
+ end
20
+
21
+ set :environment, :production
22
+
23
+ map '/' do
24
+ run SoxerApp
25
+ end
@@ -0,0 +1,14 @@
1
+ ---
2
+ environment: production
3
+ chdir: /path/to/your/application/home/dir
4
+ address: 0.0.0.0
5
+ user: toni
6
+ group: toni
7
+ port: 55500
8
+ pid: /path/to/your/application/home/dir/log/thin.pid
9
+ log: /path/to/your/application/home/dir/log/thin.log
10
+ rackup: /path/to/your/application/home/dir/config.ru
11
+ max_conns: 1024
12
+ timeout: 30
13
+ max_persistent_conns: 512
14
+ daemonize: true
@@ -0,0 +1,20 @@
1
+ uuid: 4198acb0-dcb4-012d-f730-001e378a2988
2
+ date: 2009-06-02T01:26:47+01:00
3
+ class: [doc]
4
+ category: [tutorials, recipes, rants]
5
+ title: Meum est propositum in taberna mori
6
+ summary: Ut sit vina proxima morientes ori. Maecenas quis ligula enim, ut luctus urna. Cras cursus, sem non gravida laoreet, purus felis venenatis tortor, sed commodo augue libero ac metus.
7
+ content: |
8
+ :markdown
9
+
10
+ #{ page['title'] }
11
+ ==================
12
+
13
+ #### #{ page['summary'] }
14
+
15
+ Ut consequat suscipit tincidunt. Nullam nulla magna, tincidunt ac aliquet vitae, viverra in odio. Ut sagittis erat at lorem lacinia vel convallis tortor dignissim. Aliquam erat volutpat. Donec dui elit, scelerisque suscipit tincidunt quis, suscipit et metus. Aliquam erat volutpat. Curabitur egestas velit orci. Maecenas euismod rhoncus condimentum. Ut mattis mollis ligula, malesuada consectetur sapien condimentum nec. Quisque pellentesque interdum diam, sed gravida arcu consectetur ac. Cras auctor mi nec ante elementum blandit.
16
+
17
+ In tempus cursus ipsum ac cursus. Quisque nec vulputate justo. Maecenas quis ligula enim, ut luctus urna. Cras cursus, sem non gravida laoreet, purus felis venenatis tortor, sed commodo augue libero ac metus. Quisque eget mauris sed magna cursus laoreet. Fusce augue lacus, dictum luctus sagittis ut, convallis in risus. Etiam gravida tincidunt ultrices. In hac habitasse platea dictumst. Vestibulum faucibus dolor quis magna dapibus consequat. Aenean mi nibh, tempus id placerat in, volutpat nec sem. Nunc congue bibendum leo. Aliquam viverra egestas pellentesque. Duis dictum, metus id eleifend tincidunt, diam nisl venenatis ante, a tempor turpis enim in nunc. Etiam id sem magna, tempor eleifend nisl. Quisque tortor metus, interdum et cursus sodales, ullamcorper at orci.
18
+
19
+ Cras eget justo sit amet nibh viverra condimentum. Aenean in neque eget ligula convallis mollis. Nulla ac diam erat, id tristique eros. Sed quis ligula vitae nisl laoreet dictum eget eget sapien. Nulla vehicula elit in sem feugiat sollicitudin eget in lorem. Integer erat metus, aliquam nec cursus a, dignissim in felis. Etiam arcu purus, iaculis non malesuada vel, faucibus luctus nibh. Aenean eros sem, fermentum at blandit ut, tincidunt pharetra tortor. Ut massa dui, imperdiet vitae interdum ac, pretium eget eros. Mauris blandit nibh sed tellus iaculis quis vestibulum metus sagittis. Duis sit amet odio id odio eleifend sagittis nec nec sem. Nulla facilisi. In bibendum justo et velit lobortis convallis. Pellentesque purus orci, vehicula et rutrum a, lacinia nec felis. Vivamus malesuada quam vitae ligula aliquet ut sodales sapien lacinia. Pellentesque blandit dolor in tellus accumsan lobortis. Vestibulum vel erat odio. Maecenas vel massa vitae metus condimentum faucibus mattis ut leo.
20
+
@@ -0,0 +1,20 @@
1
+ uuid: 41987df0-dcb4-012d-f72f-001e378a2988
2
+ date: 2010-04-16T16:29:22+01:00
3
+ class: [doc]
4
+ category: [tutorials, recipes, rants]
5
+ title: Ecce quomodo moriur iustus
6
+ summary: Maecenas quis ligula enim, ut luctus urna. Cras cursus, sem non gravida laoreet, purus felis venenatis tortor, sed commodo augue libero ac metus.
7
+ content: |
8
+ :markdown
9
+
10
+ #{ page['title'] }
11
+ ==================
12
+
13
+ #### #{ page['summary'] }
14
+
15
+ Ut consequat suscipit tincidunt. Nullam nulla magna, tincidunt ac aliquet vitae, viverra in odio. Ut sagittis erat at lorem lacinia vel convallis tortor dignissim. Aliquam erat volutpat. Donec dui elit, scelerisque suscipit tincidunt quis, suscipit et metus. Aliquam erat volutpat. Curabitur egestas velit orci. Maecenas euismod rhoncus condimentum. Ut mattis mollis ligula, malesuada consectetur sapien condimentum nec. Quisque pellentesque interdum diam, sed gravida arcu consectetur ac. Cras auctor mi nec ante elementum blandit.
16
+
17
+ In tempus cursus ipsum ac cursus. Quisque nec vulputate justo. Maecenas quis ligula enim, ut luctus urna. Cras cursus, sem non gravida laoreet, purus felis venenatis tortor, sed commodo augue libero ac metus. Quisque eget mauris sed magna cursus laoreet. Fusce augue lacus, dictum luctus sagittis ut, convallis in risus. Etiam gravida tincidunt ultrices. In hac habitasse platea dictumst. Vestibulum faucibus dolor quis magna dapibus consequat. Aenean mi nibh, tempus id placerat in, volutpat nec sem. Nunc congue bibendum leo. Aliquam viverra egestas pellentesque. Duis dictum, metus id eleifend tincidunt, diam nisl venenatis ante, a tempor turpis enim in nunc. Etiam id sem magna, tempor eleifend nisl. Quisque tortor metus, interdum et cursus sodales, ullamcorper at orci.
18
+
19
+ Cras eget justo sit amet nibh viverra condimentum. Aenean in neque eget ligula convallis mollis. Nulla ac diam erat, id tristique eros. Sed quis ligula vitae nisl laoreet dictum eget eget sapien. Nulla vehicula elit in sem feugiat sollicitudin eget in lorem. Integer erat metus, aliquam nec cursus a, dignissim in felis. Etiam arcu purus, iaculis non malesuada vel, faucibus luctus nibh. Aenean eros sem, fermentum at blandit ut, tincidunt pharetra tortor. Ut massa dui, imperdiet vitae interdum ac, pretium eget eros. Mauris blandit nibh sed tellus iaculis quis vestibulum metus sagittis. Duis sit amet odio id odio eleifend sagittis nec nec sem. Nulla facilisi. In bibendum justo et velit lobortis convallis. Pellentesque purus orci, vehicula et rutrum a, lacinia nec felis. Vivamus malesuada quam vitae ligula aliquet ut sodales sapien lacinia. Pellentesque blandit dolor in tellus accumsan lobortis. Vestibulum vel erat odio. Maecenas vel massa vitae metus condimentum faucibus mattis ut leo.
20
+
@@ -0,0 +1,20 @@
1
+ uuid: a75b5870-da54-012d-f71b-001e378a2988
2
+ date: 2010-09-06T00:59:22+01:00
3
+ class: [doc]
4
+ category: [tutorials, recipes]
5
+ title: Quisque eget mauris sed magna cursus
6
+ summary: Maecenas quis ligula enim, ut luctus urna. Cras cursus, sem non gravida laoreet, purus felis venenatis tortor, sed commodo augue libero ac metus.
7
+ content: |
8
+ :markdown
9
+
10
+ #{ page['title'] }
11
+ ==================
12
+
13
+ #### #{ page['summary'] }
14
+
15
+ Ut consequat suscipit tincidunt. Nullam nulla magna, tincidunt ac aliquet vitae, viverra in odio. Ut sagittis erat at lorem lacinia vel convallis tortor dignissim. Aliquam erat volutpat. Donec dui elit, scelerisque suscipit tincidunt quis, suscipit et metus. Aliquam erat volutpat. Curabitur egestas velit orci. Maecenas euismod rhoncus condimentum. Ut mattis mollis ligula, malesuada consectetur sapien condimentum nec. Quisque pellentesque interdum diam, sed gravida arcu consectetur ac. Cras auctor mi nec ante elementum blandit.
16
+
17
+ In tempus cursus ipsum ac cursus. Quisque nec vulputate justo. Maecenas quis ligula enim, ut luctus urna. Cras cursus, sem non gravida laoreet, purus felis venenatis tortor, sed commodo augue libero ac metus. Quisque eget mauris sed magna cursus laoreet. Fusce augue lacus, dictum luctus sagittis ut, convallis in risus. Etiam gravida tincidunt ultrices. In hac habitasse platea dictumst. Vestibulum faucibus dolor quis magna dapibus consequat. Aenean mi nibh, tempus id placerat in, volutpat nec sem. Nunc congue bibendum leo. Aliquam viverra egestas pellentesque. Duis dictum, metus id eleifend tincidunt, diam nisl venenatis ante, a tempor turpis enim in nunc. Etiam id sem magna, tempor eleifend nisl. Quisque tortor metus, interdum et cursus sodales, ullamcorper at orci.
18
+
19
+ Cras eget justo sit amet nibh viverra condimentum. Aenean in neque eget ligula convallis mollis. Nulla ac diam erat, id tristique eros. Sed quis ligula vitae nisl laoreet dictum eget eget sapien. Nulla vehicula elit in sem feugiat sollicitudin eget in lorem. Integer erat metus, aliquam nec cursus a, dignissim in felis. Etiam arcu purus, iaculis non malesuada vel, faucibus luctus nibh. Aenean eros sem, fermentum at blandit ut, tincidunt pharetra tortor. Ut massa dui, imperdiet vitae interdum ac, pretium eget eros. Mauris blandit nibh sed tellus iaculis quis vestibulum metus sagittis. Duis sit amet odio id odio eleifend sagittis nec nec sem. Nulla facilisi. In bibendum justo et velit lobortis convallis. Pellentesque purus orci, vehicula et rutrum a, lacinia nec felis. Vivamus malesuada quam vitae ligula aliquet ut sodales sapien lacinia. Pellentesque blandit dolor in tellus accumsan lobortis. Vestibulum vel erat odio. Maecenas vel massa vitae metus condimentum faucibus mattis ut leo.
20
+
@@ -0,0 +1,20 @@
1
+ uuid: e2121c00-dae1-012d-f724-001e378a2988
2
+ date: 2010-10-12T17:49:23+01:00
3
+ class: [doc]
4
+ category: [rants]
5
+ title: How to spend your time wisely
6
+ summary: CMS tools are great. They keep people occupied, programmers busy, wallets dry and most important of all - the masses doing meanial things into oblivion.
7
+ content: |
8
+ :markdown
9
+
10
+ #{ page['title'] }
11
+ ==================
12
+
13
+ #### #{ page['summary'] }
14
+
15
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nunc dolor, porta in interdum ornare, scelerisque sit amet orci. Nullam elit turpis, molestie et imperdiet eu, lobortis vitae quam. Aenean nunc orci, pellentesque et viverra sed, facilisis in nulla. Maecenas laoreet eleifend nunc, vitae convallis lorem rhoncus non. Cras gravida sapien sed lacus aliquet rutrum. In varius leo ac nibh tincidunt accumsan. Nullam ut pulvinar tortor. Vivamus vel pretium quam. Donec vel viverra tortor. Curabitur turpis libero, lacinia et hendrerit id, suscipit in tortor. Cras enim tellus, ornare vitae laoreet id, adipiscing ut nunc. In sed ligula mauris, ut porttitor dui. Sed iaculis eros ac lectus scelerisque hendrerit. Duis sed felis vel ipsum accumsan bibendum. Nulla scelerisque pharetra lacinia. Donec vitae neque risus, eu pellentesque sem. Donec hendrerit mattis augue, vel viverra metus dapibus non. Duis imperdiet augue nec nulla pulvinar molestie. Aenean interdum dapibus dui, et varius orci aliquam auctor. Fusce iaculis, mauris eget laoreet cursus, diam lacus posuere lectus, at gravida nulla risus blandit est.
16
+
17
+ Quisque nunc lectus, feugiat a vulputate ac, accumsan placerat nunc. Fusce feugiat pretium enim et ullamcorper. Vestibulum ultrices tristique luctus. Morbi in dolor non tellus mollis elementum ut quis magna. Etiam vel ante massa. Curabitur turpis ipsum, suscipit eu vestibulum nec, lacinia vel nulla. Donec placerat vestibulum auctor. Donec tincidunt egestas ultrices. Fusce porta tortor vitae sem faucibus elementum suscipit nunc vehicula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
18
+
19
+ Vestibulum eu dolor eu justo scelerisque ultrices ac eu risus. Vivamus fermentum neque quis lorem viverra commodo. Donec a mauris quam, in condimentum diam. Aliquam convallis lectus a elit condimentum luctus. Curabitur ultricies eleifend lorem a molestie. Nunc mauris sapien, accumsan eget tincidunt vitae, tincidunt pretium lacus. Etiam porta leo at enim ullamcorper ut semper risus eleifend. Cras sagittis mi nulla, ut mollis enim. Cras enim mauris, aliquet vel dapibus eget, ultrices id mauris. Pellentesque auctor, arcu ac commodo pulvinar, nisi nunc euismod lacus, ac dignissim orci est dignissim enim. Integer nunc felis, aliquam sit amet ultricies sit amet, porttitor eu odio.
20
+
@@ -0,0 +1,38 @@
1
+ uuid: 6648b260-da52-012d-f71a-001e378a2988
2
+ date: 2010-11-25T00:42:16+01:00
3
+ class: [doc]
4
+ category: [tutorials]
5
+ title: Soxer application structure
6
+ summary: Every soxer project has a similar default directory structure, workflow and dynamics. As a matter of fact, creating a blog is exactly the same as creating a corporate web page. The only difference is naming your URLs... and perhaps styling with SASS to achieve the desired effect.
7
+ content: |
8
+ :markdown
9
+
10
+ #{ page['title'] }
11
+ ==================
12
+
13
+ #### #{ page['summary'] }
14
+
15
+ This blog is an excellent example of the power of soxer. It only takes 3 separate files (excluding configuration) for the entire design, layout, style and whatnot. Ok, we admit, every block in the column is a separate file - so... 6 files:
16
+
17
+ 1. **./views/layout.haml**
18
+ This is the mama of all html. It represents the HTML layout every page uses. It's written in [HAML](http://haml-lang.com) and uses all bells and whistles haml can offer.
19
+ 2. **./css/*/css.css**
20
+ Well, this could be only one css file, but i wanted to make sure you can switch styles on the fly. That's why i created several SASS styles. Also, there is a common sass file, that's included in all designs. It's because I believe programming and [Martini cocktails](http://en.wikipedia.org/wiki/Martini_%28cocktail%29) share [a common trait](http://en.wikipedia.org/wiki/Don%27t_repeat_yourself).
21
+ 3. **./views/_block_*.haml**
22
+ These are blocks that appear in the narrow column and other parts of the site (like repetitive short versions of documents and such). They are "snippets" or "partials". Parts of HTML code (ok, you got me... it's HAML), that can be static or dynamic. Like in [Rails](http://rubyonrails.org), they have an underscore at the beginning of the filename. While this may be a convention in rails, it's hard coded here. For now.
23
+
24
+
25
+ Content, oh, wonderful content
26
+ ------------------------------
27
+
28
+ Content resides in - you have probably guessed it - in the **./content** directory.
29
+
30
+ Have a look at the content, the directories and filenames. They map directly to URLs. That way you are free to name your directory structure (and therefore site structure) arbitrarily. Naming directories **./content/categories** or **./content/blog** is arbitrary. We could name them **./content/foo** or **./content/bar** and it would make no difference, only your URLs would be quite daft.
31
+
32
+ The content files are written in [YAML](http://www.yaml.org). Currently soxer requires a yaml file to have a **content:** and content is formated in HAML. This is hard coded at the moment, but might be configurable in the future.
33
+
34
+
35
+ What now?
36
+ ---------
37
+
38
+ Well, play with the source of this blog, find bugs, send me fixes and visit <http://soxer.mutsu.org> for more information.
@@ -0,0 +1,29 @@
1
+ uuid: 4198d730-dcb4-012d-f731-001e378a2988
2
+ date: 2010-11-28T01:27:03+01:00
3
+ class: [index]
4
+ author:
5
+ name: Toni Anzlovar
6
+ title: The blog Atom feed
7
+ summary:
8
+ content: |
9
+ -#---------------------------------------------------------------[controller]
10
+ :ruby
11
+ all = categories = Dir.glob( File.join( settings.origin, 'categories/*' ) )
12
+ categories.map!{|c| c.split('/').last.split('.').first }.delete 'index'
13
+
14
+ documents = get_list do |d|
15
+ #if params['category'] and categories.include? params['category']
16
+ # d if d['category'] and d['category'].include? params['category']
17
+ #end
18
+
19
+ if d['category'] and d['category'].include? params['category']
20
+ d
21
+ elsif d['category'] and !params['category']
22
+ d
23
+ end
24
+ end.sort{|a,b| a['date']<=>b['date'] }.reverse
25
+ -#---------------------------------------------------------------------[view]
26
+ -documents.each do |doc|
27
+ =atom doc
28
+
29
+ =params['category']
@@ -0,0 +1,51 @@
1
+ uuid: 4198f780-dcb4-012d-f732-001e378a2988
2
+ date: 2010-11-24T23:48:55+01:00
3
+ class: [aggregate]
4
+ title: Blog
5
+ summary: |
6
+ There are many things on this planet, but blogs are obviously one of the most important ones. If they weren't, we'd all be solving the nuclear crisis, feeding the poor, or exploring the unknown reaches of our planet.
7
+ content: |
8
+ -#---------------------------------------------------------------[controller]
9
+ :ruby
10
+ # We create an array of categories from names of files in this
11
+ # directory. These are simple soft links to this index file.
12
+ # We exclude the index, as it's not category at all.
13
+ all = categories = Dir.glob( File.join( settings.origin, 'categories/*' ) )
14
+ categories.map!{|c| c.split('/').last.split('.').first }.delete 'index'
15
+
16
+ # now we check if URL's last word coresponds to any of the categories found.
17
+ # If it does, the we set categories to that category, otherwise, all
18
+ # categories, found previously are used.
19
+ category = params[:splat].first.split('/').last
20
+ categories = [category] if categories.include? category
21
+
22
+ # We now filter out the documents, that do not have the category or have
23
+ # a wrong set of categories.
24
+ # We sort the set of documents
25
+ documents = get_list do |doc|
26
+ doc if doc['category'] and (doc['category'] & categories).length > 0
27
+ end.sort{|a,b| b['date']<=>a['date'] }
28
+
29
+ # This just ads the category name to the end of UUID for this file.
30
+ # not very nice, but better, than having all categories share one UUID.
31
+ page['uuid'] += '-'+categories[0] if categories.length == 1
32
+
33
+ # Ok, we need to slightly alter the title of the page, so we know what are
34
+ # we watching.
35
+ title_addition = category.capitalize
36
+ -#---------------------------------------------------------------------[view]
37
+ %h1= page['title'] + ' - ' + title_addition
38
+ .summary
39
+ %p= page['summary']
40
+
41
+ %h2 Topics covered
42
+ %ul
43
+ %li= link_to 'All topics combined', '/categories'
44
+ -all.each do |category|
45
+ %li
46
+ = link_to category.capitalize, '/categories/'+category
47
+ and the coresponding
48
+ = link_to 'atom feed', '/blog.atom?category='+category
49
+
50
+ -documents.each do |doc|
51
+ =partial :doc_short, :locals => { :doc => doc }
@@ -0,0 +1,32 @@
1
+ uuid: 4cc0a810-d9d9-012d-f718-001e378a2988
2
+ date: 2010-11-24T00:08:19+01:00
3
+ class: [index]
4
+ title: Simple, elegant, fast, flexible
5
+ summary: |
6
+ %p Fully themable, featherweight blog using #{link_to 'Soxer', 'http://soxer.mutsu.org'} and #{link_to 'Sinatra', 'http://www.sinatrarb.com'}.
7
+ content: |
8
+ -#---------------------------------------------------------------[controller]
9
+ :ruby
10
+ documents = get_list do |d|
11
+ d if d['category']
12
+ end.sort{|a,b| a['date']<=>b['date'] }.reverse
13
+ -#---------------------------------------------------------------------[view]
14
+ %h1= page['title']
15
+ .summary= haml page['summary']
16
+
17
+ %p You are welcome to explore the code, adapt it to your needs and use it. A couple of stylesheets have been included which should provide a base to develop your own beautiful CSS themes. They written in SASS, showcasing the awsome power of dynamic css generation.
18
+
19
+ %h2 Available themes
20
+ %ul.themelist
21
+ %li= link_to 'Blossom brush', '?theme=blossom'
22
+ %li= link_to 'DNA brush', '?theme=dna'
23
+ -#%li= link_to 'Trashed', '?theme=trashed'
24
+
25
+ -documents.each do |doc|
26
+ .short
27
+ %small= doc['date']
28
+ %h2
29
+ %a{ :href => doc['url'] }
30
+ = doc['title']
31
+ %p= doc['summary']
32
+
@@ -0,0 +1,6 @@
1
+ .block
2
+ %h2 About
3
+ .content
4
+ %h3 Soxer
5
+ %p The simplest and most flexible web publishing solution on the planet.
6
+ %p This is my first generic blog. You are welcome to poke around my source.
@@ -0,0 +1,12 @@
1
+ -#-----------------------------------------------------------------[controller]
2
+ :ruby
3
+ categories = Dir.glob( File.join( settings.origin, 'categories/*' ) )
4
+ categories.map!{|c| c.split('/').last.split('.').first }.delete 'index'
5
+ -#-----------------------------------------------------------------------[view]
6
+ .block
7
+ %h2 Categories
8
+ .content
9
+ %ul
10
+ %li= link_to 'All categories combined', '/categories'
11
+ -categories.each do |category|
12
+ %li= link_to category.capitalize, '/categories/'+category
@@ -0,0 +1,23 @@
1
+ -#-----------------------------------------------------------------[controller]
2
+ :ruby
3
+ history ||= {}
4
+
5
+ documents = get_list {|d| d if d['category'] }.sort{|b,a| a['date']<=>b['date'] }
6
+ documents.each do |d|
7
+ y, m = d['date'].year, d['date'].month
8
+ history[y] ||= {}
9
+ history[y][m] ||= []
10
+ history[y][m] << d['url']
11
+ end
12
+ -#-----------------------------------------------------------------------[view]
13
+ .block
14
+ %h2 History
15
+ .content
16
+ h4 This block is currently not working properly.
17
+ %ul
18
+ -history.each_pair do |y,m|
19
+ -m.each_pair do |mm,dd|
20
+ %li
21
+ %b #{y}
22
+ #{link_to Date::MONTHNAMES[mm], '#'}
23
+ %i (#{dd.count})
@@ -0,0 +1,16 @@
1
+ -#-----------------------------------------------------------------[controller]
2
+ :ruby
3
+ documents = get_list do |d|
4
+ d if d['category']
5
+ end.sort{|a,b| b['date']<=>a['date'] }[0..4]
6
+ -#-----------------------------------------------------------------------[view]
7
+ .block.recent-entries
8
+ %h2 Recent blog entries
9
+ .content
10
+ %ul
11
+ -documents.each do |doc|
12
+ %li
13
+ .date
14
+ %small= doc['date']
15
+ %a{:href=>doc['url']}= doc['title']
16
+
@@ -0,0 +1,6 @@
1
+ .docinfo
2
+ Published:
3
+ = page['date']
4
+ -page['category'].each do |cat|
5
+ |
6
+ =link_to cat, '/categories/'+cat
@@ -0,0 +1,10 @@
1
+ .short
2
+ %small
3
+ = doc['date']
4
+ -doc['category'].each do |cat|
5
+ |
6
+ =link_to cat, '/categories/'+cat
7
+ %h2
8
+ %a{ :href => doc['url'] }
9
+ = doc['title']
10
+ %p= doc['summary']
@@ -0,0 +1,155 @@
1
+ /*
2
+ -----------------------------------------------------------------------------
3
+ Blossom Brush Blog Theme for Soxer | http://soxer.mutsu.org
4
+ Copyright 2010 Toni Anzlovar, toni[at]formalibre.si
5
+ Attribution-ShareAlike 3.0 | http://creativecommons.org/licenses/by-sa/3.0/
6
+ -----------------------------------------------------------------------------
7
+ @import "../common"
8
+
9
+
10
+ // COLORS
11
+ //-----------------------------------------------------------------------------
12
+ $white: #ffffff
13
+ $link: #ff5555
14
+ $important: #ff5555
15
+ $grey: #808080
16
+ $lite: #dadada
17
+ $normal: #4d4d4d
18
+
19
+ // GENERAL
20
+ //-----------------------------------------------------------------------------
21
+ body
22
+ color: $normal
23
+ font:
24
+ size: 13px
25
+ family: "Trebuchet MS", Verdana, Arial, Helvetica, Swiss, Sans-Serif
26
+ margin: 0
27
+ padding: 0
28
+
29
+ a
30
+ color: $important
31
+ text-decoration: none
32
+ @include corners(3)
33
+
34
+ &:hover
35
+ color: $white
36
+ background: $important
37
+ padding: 0px 3px
38
+ margin: -0px -3px
39
+
40
+ h1, h2, h3, h4, h5, h6
41
+ +n
42
+
43
+ h1, h2
44
+ color: $grey
45
+ font:
46
+ family: GeoSans
47
+ weight: normal
48
+ h1
49
+ font-size: 38px
50
+ margin:
51
+ bottom: 30px
52
+
53
+ h2
54
+ font-size: 28px
55
+ a
56
+ @include corners(7)
57
+ &:hover
58
+ @include corners(0)
59
+ +n
60
+ color: $important
61
+ background: none
62
+ border-bottom: 1px solid $important
63
+
64
+ hr
65
+ display: none
66
+
67
+ // COMMON
68
+ //-----------------------------------------------------------------------------
69
+ body
70
+ background: url(/css/blossom/blossom.jpg) center top no-repeat
71
+ // @include sh(inset 0px 0px 200px rgba(0, 0, 0, .25))
72
+
73
+ #header, #content
74
+ width: 750px
75
+ +center
76
+
77
+ #header
78
+ height: 260px
79
+ color: $white
80
+ text-shadow: black 1px 1px 5px
81
+ .slogan
82
+ font:
83
+ family: GeoSans
84
+ size: 42px
85
+
86
+ padding-top: 10px
87
+
88
+ #content
89
+ padding-top: 20px
90
+ &:after
91
+ +clear
92
+
93
+ #footer
94
+ width: 100%
95
+ background: $lite
96
+ border-top: 1px solid $grey
97
+ margin-top: 30px
98
+ @include sh(inset 0px 0px 100px rgba(0, 0, 0, .25))
99
+
100
+ .content
101
+ width: 750px
102
+ height: 180px
103
+ +center
104
+
105
+ // MAIN & SIDEBAR
106
+ //-----------------------------------------------------------------------------
107
+ #main, #sidebar
108
+ float: left
109
+ min-height: 300px
110
+
111
+ #main
112
+ width: 450px
113
+ margin:
114
+ top: 10px
115
+ right: 14px
116
+
117
+ .short
118
+ margin-top: 30px
119
+ small
120
+ color: $grey
121
+ font:
122
+ style: italic
123
+ size: 13px
124
+ p
125
+ +n
126
+ .shot:after
127
+ +clear
128
+
129
+ #sidebar
130
+ width: 286px
131
+ margin:
132
+ top: 19px
133
+
134
+
135
+ // BLOCKS
136
+ //-----------------------------------------------------------------------------
137
+ .block
138
+ margin-bottom: 20px
139
+ ul
140
+ +cu
141
+ margin-top: 10px
142
+ li
143
+ display: block
144
+ clear: both
145
+ +cl
146
+ margin-bottom: 5px
147
+ &:after
148
+ +clear
149
+
150
+ &.recent-entries
151
+ small
152
+ font-style: italic
153
+ a
154
+ display: block
155
+ margin-left: 20px
@@ -0,0 +1,72 @@
1
+ //
2
+ -----------------------------------------------------------------------------
3
+ Common theme presets for Soxer | http://soxer.mutsu.org
4
+ Copyright 2010 Toni Anzlovar, toni[at]formalibre.si
5
+ Attribution-ShareAlike 2.5 | http://creativecommons.org/licenses/by-sa/2.5/
6
+ -----------------------------------------------------------------------------
7
+
8
+ // FONTS
9
+ //-----------------------------------------------------------------------------
10
+ @font-face
11
+ font-family: GeoSans
12
+ src: url(/fonts/GeosansLight.ttf)
13
+
14
+ // SUGAR
15
+ //-----------------------------------------------------------------------------
16
+ // $h = horizontal position
17
+ // $v = vertical position
18
+ // $r = radius
19
+ @mixin corner($h,$v,$r)
20
+ :-moz-border-radius-#{$h+$v} $r+px
21
+ :-webkit-border-#{$v+$h}-radius $r+px
22
+ :border-#{$v+$h}-radius $r+px
23
+
24
+ @mixin corners($r)
25
+ :-moz-border-radius $r+px
26
+ :-webkit-border-radius $r+px
27
+ :border-radius $r+px
28
+
29
+ // $x = horizontal offset
30
+ // $y = vertical offset
31
+ // $r = radius
32
+ // $red = red component
33
+ // $green = green component
34
+ // $blue = blue component
35
+ // $alpha = transparency (opacity)
36
+ @mixin shaddow($x,$y,$r,$red,$green,$blue,$alpha)
37
+ :box-shadow #{$x}px #{$y}px #{$r}px rgba($red, $green, $blue, $alpha)
38
+ :-webkit-box-shadow #{$x}px #{$y}px #{$r}px rgba($red, $green, $blue, $alpha)
39
+ :-moz-box-shadow #{$x}px #{$y}px #{$r}px rgba($red, $green, $blue, $alpha)
40
+
41
+ @mixin sh($sh)
42
+ :box-shadow $sh
43
+ :-webkit-box-shadow $sh
44
+ :-moz-box-shadow $sh
45
+
46
+ =n
47
+ margin: 0 0 0 0
48
+ padding: 0 0 0 0
49
+
50
+ =cu
51
+ +n
52
+ list-style: none
53
+
54
+ =cl
55
+ float: left
56
+ +n
57
+ list-style: none
58
+ list-style-image: none
59
+ list-style-type: none
60
+
61
+
62
+ =center
63
+ margin:
64
+ left: auto
65
+ right: auto
66
+
67
+ =clear
68
+ content: "."
69
+ display: block
70
+ height: 0
71
+ clear: both
72
+ visibility: hidden
@@ -0,0 +1,152 @@
1
+ /*
2
+ -----------------------------------------------------------------------------
3
+ DNA Brush Blog Theme for Soxer | http://soxer.mutsu.org
4
+ Copyright 2010 Toni Anzlovar, toni[at]formalibre.si
5
+ Attribution-ShareAlike 3.0 | http://creativecommons.org/licenses/by-sa/3.0/
6
+ -----------------------------------------------------------------------------
7
+ @import "../common"
8
+
9
+
10
+ // COLORS
11
+ //-----------------------------------------------------------------------------
12
+ $white: #ffffff
13
+ $link: #375d9d
14
+ $important: #375d9d
15
+ $grey: #808080
16
+ $lite: #dadada
17
+ $normal: #4d4d4d
18
+
19
+ // GENERAL
20
+ //-----------------------------------------------------------------------------
21
+ body
22
+ color: $normal
23
+ font:
24
+ size: 13px
25
+ family: "Trebuchet MS", Verdana, Arial, Helvetica, Swiss, Sans-Serif
26
+ margin: 0
27
+ padding: 0
28
+
29
+ a
30
+ color: $important
31
+ text-decoration: none
32
+ @include corners(3)
33
+
34
+ &:hover
35
+ color: $white
36
+ background: $important
37
+ padding: 0px 3px
38
+ margin: -0px -3px
39
+
40
+ h1, h2, h3, h4, h5, h6
41
+ +n
42
+
43
+ h1, h2
44
+ color: $grey
45
+ font:
46
+ family: GeoSans
47
+ weight: normal
48
+ h1
49
+ font-size: 38px
50
+ margin:
51
+ bottom: 30px
52
+
53
+ h2
54
+ font-size: 28px
55
+ a
56
+ @include corners(7)
57
+ &:hover
58
+ @include corners(0)
59
+ +n
60
+ color: $important
61
+ background: none
62
+ border-bottom: 1px solid $important
63
+
64
+ hr
65
+ display: none
66
+
67
+ // COMMON
68
+ //-----------------------------------------------------------------------------
69
+ body
70
+ background: url(/css/dna/sequence.jpg) center top no-repeat
71
+ // @include sh(inset 0px 0px 200px rgba(0, 0, 0, .25))
72
+
73
+ #header, #content
74
+ width: 750px
75
+ +center
76
+
77
+ #header
78
+ height: 260px
79
+ color: $white
80
+ text-shadow: black 1px 1px 5px
81
+ .slogan
82
+ font:
83
+ family: GeoSans
84
+ size: 42px
85
+
86
+ padding-top: 10px
87
+
88
+ #content
89
+ padding-top: 20px
90
+ &:after
91
+ +clear
92
+
93
+ #footer
94
+ width: 100%
95
+ background: $lite
96
+ border-top: 1px solid $grey
97
+ margin-top: 30px
98
+ @include sh(inset 0px 0px 100px rgba(0, 0, 0, .25))
99
+
100
+ .content
101
+ width: 750px
102
+ height: 180px
103
+ +center
104
+
105
+ // MAIN & SIDEBAR
106
+ //-----------------------------------------------------------------------------
107
+ #main, #sidebar
108
+ float: left
109
+ min-height: 300px
110
+
111
+ #main
112
+ width: 464px
113
+ margin:
114
+ top: 10px
115
+ left: 286px
116
+
117
+ .short
118
+ margin-top: 30px
119
+ small
120
+ color: $grey
121
+ font:
122
+ style: italic
123
+ size: 13px
124
+ p
125
+ +n
126
+ .shot:after
127
+ +clear
128
+
129
+ #sidebar
130
+ width: 272px
131
+ margin:
132
+ top: 19px
133
+ left: -750px
134
+
135
+ // BLOCKS
136
+ //-----------------------------------------------------------------------------
137
+ .block
138
+ margin-bottom: 20px
139
+ ul
140
+ +cu
141
+ margin-top: 10px
142
+ li
143
+ display: block
144
+ clear: both
145
+ +cl
146
+ margin-bottom: 5px
147
+ &:after
148
+ +clear
149
+
150
+ &.recent-entries
151
+ a
152
+ display: block
@@ -0,0 +1,152 @@
1
+ /*
2
+ -----------------------------------------------------------------------------
3
+ Trashed Blog Theme for Soxer | http://soxer.mutsu.org
4
+ Copyright 2010 Toni Anzlovar, toni[at]formalibre.si
5
+ Attribution-ShareAlike 3.0 | http://creativecommons.org/licenses/by-sa/3.0/
6
+ -----------------------------------------------------------------------------
7
+ @import "../common"
8
+
9
+
10
+ // COLORS
11
+ //-----------------------------------------------------------------------------
12
+ $white: #ffffff
13
+ $link: #375d9d
14
+ $important: #375d9d
15
+ $grey: #808080
16
+ $lite: #dadada
17
+ $normal: #4d4d4d
18
+
19
+ // GENERAL
20
+ //-----------------------------------------------------------------------------
21
+ body
22
+ color: $normal
23
+ font:
24
+ size: 13px
25
+ family: "Trebuchet MS", Verdana, Arial, Helvetica, Swiss, Sans-Serif
26
+ margin: 0
27
+ padding: 0
28
+
29
+ a
30
+ color: $important
31
+ text-decoration: none
32
+ @include corners(3)
33
+
34
+ &:hover
35
+ color: $white
36
+ background: $important
37
+ padding: 0px 3px
38
+ margin: -0px -3px
39
+
40
+ h1, h2, h3, h4, h5, h6
41
+ +n
42
+
43
+ h1, h2
44
+ color: $grey
45
+ font:
46
+ family: GeoSans
47
+ weight: normal
48
+ h1
49
+ font-size: 38px
50
+ margin:
51
+ bottom: 30px
52
+
53
+ h2
54
+ font-size: 28px
55
+ a
56
+ @include corners(7)
57
+ &:hover
58
+ @include corners(0)
59
+ +n
60
+ color: $important
61
+ background: none
62
+ border-bottom: 1px solid $important
63
+
64
+ hr
65
+ display: none
66
+
67
+ // COMMON
68
+ //-----------------------------------------------------------------------------
69
+ body
70
+ background: url(/css/dna/sequence.jpg) center top no-repeat
71
+ // @include sh(inset 0px 0px 200px rgba(0, 0, 0, .25))
72
+
73
+ #header, #content
74
+ width: 750px
75
+ +center
76
+
77
+ #header
78
+ height: 260px
79
+ color: $white
80
+ text-shadow: black 1px 1px 5px
81
+ .slogan
82
+ font:
83
+ family: GeoSans
84
+ size: 42px
85
+
86
+ padding-top: 10px
87
+
88
+ #content
89
+ padding-top: 20px
90
+ &:after
91
+ +clear
92
+
93
+ #footer
94
+ width: 100%
95
+ background: $lite
96
+ border-top: 1px solid $grey
97
+ margin-top: 30px
98
+ @include sh(inset 0px 0px 100px rgba(0, 0, 0, .25))
99
+
100
+ .content
101
+ width: 750px
102
+ height: 180px
103
+ +center
104
+
105
+ // MAIN & SIDEBAR
106
+ //-----------------------------------------------------------------------------
107
+ #main, #sidebar
108
+ float: left
109
+ min-height: 300px
110
+
111
+ #main
112
+ width: 464px
113
+ margin:
114
+ top: 10px
115
+ left: 286px
116
+
117
+ .short
118
+ margin-top: 30px
119
+ small
120
+ color: $grey
121
+ font:
122
+ style: italic
123
+ size: 13px
124
+ p
125
+ +n
126
+ .shot:after
127
+ +clear
128
+
129
+ #sidebar
130
+ width: 272px
131
+ margin:
132
+ top: 19px
133
+ left: -750px
134
+
135
+ // BLOCKS
136
+ //-----------------------------------------------------------------------------
137
+ .block
138
+ margin-bottom: 20px
139
+ ul
140
+ +cu
141
+ margin-top: 10px
142
+ li
143
+ display: block
144
+ clear: both
145
+ +cl
146
+ margin-bottom: 5px
147
+ &:after
148
+ +clear
149
+
150
+ &.recent-entries
151
+ a
152
+ display: block
@@ -0,0 +1,37 @@
1
+ !!! 5
2
+ %html( lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" )
3
+ %head
4
+ %title= "Soxer demo blog: "+page['title']
5
+ %meta(charset="utf-8")
6
+ %link(href='/blog.atom' rel='alternate' title='News' type='application/atom+xml')
7
+ %link( href="/css/#{session[:theme]}/css.css" media="screen" rel="stylesheet" type="text/css" )
8
+ %body{:class => page['class']}
9
+ #header
10
+ .slogan Eternal search for perfection
11
+ .tagline Soxer, the web publishing tool
12
+ %hr.hidden
13
+ #content
14
+ = breadcrumb
15
+ #main
16
+ = yield
17
+ -if page['category']
18
+ = partial :doc_docinfo, :locals => { :page => page }
19
+ %hr.hidden
20
+ #sidebar
21
+ =partial :block_about
22
+ =partial :block_recent
23
+ =partial :block_categories
24
+ =partial :block_history
25
+ #footer
26
+ %hr.hidden
27
+ .content
28
+ :markdown
29
+ Copyright (C) 2010 Toni Anžlovar
30
+
31
+ [Soxer](http://soxer.mutsu.org) is free software, released under [GPL V3](http://www.gnu.org/licenses/gpl.html).
32
+ Stylesheets are subject to [Attribution-ShareAlike 3.0 Unported](http://creativecommons.org/licenses/by-sa/3.0/) license by [Creative Commons](http://creativecommons.org).
33
+
34
+ _Photo: DNA Sequence:_ Flavio Takemoto, <http://www.takemoto.com.br>
35
+ _Photo: Cherry blossoms:_ David Hamel, <http://www.davehamel.com>
36
+
37
+ If you like the concept and/or are using [Soxer](http://soxer.mutsu.org) for a project, please let me know: #{obfuscate 'toni@formalibre.si'}.
@@ -0,0 +1,3 @@
1
+ def initSkel dest
2
+ %w[bin log public].each {|d| Dir.mkdir "#{dest}/#{d}" unless Dir.exists? "#{dest}/#{d}" }
3
+ end
data/soxer.gemspec CHANGED
@@ -4,8 +4,8 @@ Gem::Specification.new do |s|
4
4
  s.rubygems_version = '1.3.7'
5
5
 
6
6
  s.name = 'soxer'
7
- s.version = '0.9.9'
8
- s.date = '2011-03-03'
7
+ s.version = '0.9.10'
8
+ s.date = '2011-03-21'
9
9
  s.rubyforge_project = 'soxer'
10
10
 
11
11
  s.summary = "Dynamic web site generator engine"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soxer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 41
4
+ hash: 47
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 9
10
- version: 0.9.9
9
+ - 10
10
+ version: 0.9.10
11
11
  platform: ruby
12
12
  authors:
13
13
  - Toni Anzlovar
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-03 00:00:00 +01:00
18
+ date: 2011-03-21 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -114,10 +114,35 @@ files:
114
114
  - lib/soxer/views/google_analytics.haml
115
115
  - lib/soxer/views/google_ads.haml
116
116
  - lib/soxer/views/breadcrumb.haml
117
- - lib/soxer/skel/empty/bin/EMPTY
117
+ - lib/soxer/skel/blog/content/index.yaml
118
+ - lib/soxer/skel/blog/content/blog/2010-09-06-lorem_ipsum.yaml
119
+ - lib/soxer/skel/blog/content/blog/2010-11-24-what_is_where.yaml
120
+ - lib/soxer/skel/blog/content/blog/2010-10-12-how_to_spend_your_time_wisely.yaml
121
+ - lib/soxer/skel/blog/content/blog/2010-04-16-ecce_quomdo_moritur_iustus.yaml
122
+ - lib/soxer/skel/blog/content/blog/2009-06-02-meum_est_propositum.yaml
123
+ - lib/soxer/skel/blog/content/blog.atom.yaml
124
+ - lib/soxer/skel/blog/content/categories/index.yaml
125
+ - lib/soxer/skel/blog/SETUP.rb
126
+ - lib/soxer/skel/blog/public/css/dna/sequence.jpg
127
+ - lib/soxer/skel/blog/public/css/blossom/blossom.jpg
128
+ - lib/soxer/skel/blog/public/fonts/trashed.ttf
129
+ - lib/soxer/skel/blog/public/fonts/GeosansLight.ttf
130
+ - lib/soxer/skel/blog/config.yml
131
+ - lib/soxer/skel/blog/config.ru
132
+ - lib/soxer/skel/blog/views/_doc_short.haml
133
+ - lib/soxer/skel/blog/views/layout.haml
134
+ - lib/soxer/skel/blog/views/_block_history.haml
135
+ - lib/soxer/skel/blog/views/css/common.sass
136
+ - lib/soxer/skel/blog/views/css/trashed/css.sass
137
+ - lib/soxer/skel/blog/views/css/dna/css.sass
138
+ - lib/soxer/skel/blog/views/css/blossom/css.sass
139
+ - lib/soxer/skel/blog/views/_block_categories.haml
140
+ - lib/soxer/skel/blog/views/_block_about.haml
141
+ - lib/soxer/skel/blog/views/_doc_docinfo.haml
142
+ - lib/soxer/skel/blog/views/_block_recent.haml
143
+ - lib/soxer/skel/blog/app.rb
118
144
  - lib/soxer/skel/empty/content/index.yaml
119
- - lib/soxer/skel/empty/log/EMPTY
120
- - lib/soxer/skel/empty/public/EMPTY
145
+ - lib/soxer/skel/empty/SETUP.rb
121
146
  - lib/soxer/skel/empty/config.yml
122
147
  - lib/soxer/skel/empty/config.ru
123
148
  - lib/soxer/skel/empty/views/layout.haml
File without changes
File without changes
File without changes