soxer 0.9.9 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +20 -7
- data/README.markdown +1 -1
- data/bin/soxer +6 -3
- data/lib/soxer/main.rb +2 -2
- data/lib/soxer/skel/blog/SETUP.rb +7 -0
- data/lib/soxer/skel/blog/app.rb +17 -0
- data/lib/soxer/skel/blog/config.ru +25 -0
- data/lib/soxer/skel/blog/config.yml +14 -0
- data/lib/soxer/skel/blog/content/blog/2009-06-02-meum_est_propositum.yaml +20 -0
- data/lib/soxer/skel/blog/content/blog/2010-04-16-ecce_quomdo_moritur_iustus.yaml +20 -0
- data/lib/soxer/skel/blog/content/blog/2010-09-06-lorem_ipsum.yaml +20 -0
- data/lib/soxer/skel/blog/content/blog/2010-10-12-how_to_spend_your_time_wisely.yaml +20 -0
- data/lib/soxer/skel/blog/content/blog/2010-11-24-what_is_where.yaml +38 -0
- data/lib/soxer/skel/blog/content/blog.atom.yaml +29 -0
- data/lib/soxer/skel/blog/content/categories/index.yaml +51 -0
- data/lib/soxer/skel/blog/content/index.yaml +32 -0
- data/lib/soxer/skel/blog/public/css/blossom/blossom.jpg +0 -0
- data/lib/soxer/skel/blog/public/css/dna/sequence.jpg +0 -0
- data/lib/soxer/skel/blog/public/fonts/GeosansLight.ttf +0 -0
- data/lib/soxer/skel/blog/public/fonts/trashed.ttf +0 -0
- data/lib/soxer/skel/blog/views/_block_about.haml +6 -0
- data/lib/soxer/skel/blog/views/_block_categories.haml +12 -0
- data/lib/soxer/skel/blog/views/_block_history.haml +23 -0
- data/lib/soxer/skel/blog/views/_block_recent.haml +16 -0
- data/lib/soxer/skel/blog/views/_doc_docinfo.haml +6 -0
- data/lib/soxer/skel/blog/views/_doc_short.haml +10 -0
- data/lib/soxer/skel/blog/views/css/blossom/css.sass +155 -0
- data/lib/soxer/skel/blog/views/css/common.sass +72 -0
- data/lib/soxer/skel/blog/views/css/dna/css.sass +152 -0
- data/lib/soxer/skel/blog/views/css/trashed/css.sass +152 -0
- data/lib/soxer/skel/blog/views/layout.haml +37 -0
- data/lib/soxer/skel/empty/SETUP.rb +3 -0
- data/soxer.gemspec +2 -2
- metadata +32 -7
- data/lib/soxer/skel/empty/bin/EMPTY +0 -0
- data/lib/soxer/skel/empty/log/EMPTY +0 -0
- 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
|
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
|
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
|
-
|
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
|
-
*
|
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
|
-
|
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"
|
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
|
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
|
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),
|
89
|
-
|
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,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
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -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,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'}.
|
data/soxer.gemspec
CHANGED
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:
|
4
|
+
hash: 47
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.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-
|
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/
|
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/
|
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
|