milk 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +7 -0
- data/LICENSE +5 -5
- data/README.rdoc +7 -0
- data/Rakefile +55 -9
- data/VERSION +1 -0
- data/milk.gemspec +135 -20
- data/site_template/config/config.yaml +2 -2
- data/site_template/public/cache/News/index.html +1 -1
- data/test/milk_test.rb +7 -0
- data/test/test_helper.rb +10 -0
- metadata +91 -120
- data/lib/milk/component.rb.~1~ +0 -141
- data/lib/milk/page.rb.~1~ +0 -118
- data/site_template/config/foot.yaml.~1~ +0 -2
- data/site_template/config/foot.yaml.~2~ +0 -2
- data/site_template/config/foot.yaml.~3~ +0 -1
- data/site_template/config/foot.yaml.~4~ +0 -3
- data/site_template/config/foot.yaml.~5~ +0 -3
- data/site_template/config/head.yaml.~1~ +0 -2
- data/site_template/config/head.yaml.~2~ +0 -2
- data/site_template/config/head.yaml.~3~ +0 -1
- data/site_template/config/head.yaml.~4~ +0 -18
- data/site_template/config/head.yaml.~5~ +0 -18
- data/site_template/pages/Home.yaml.~1~ +0 -14
- data/site_template/pages/Home.yaml.~2~ +0 -14
- data/site_template/pages/Home.yaml.~3~ +0 -14
- data/site_template/pages/Home.yaml.~4~ +0 -14
- data/site_template/pages/Home.yaml.~5~ +0 -14
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2009,
|
1
|
+
Copyright (c) 2009, Tim Caswell
|
2
2
|
All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
@@ -6,13 +6,13 @@ are permitted provided that the following conditions are met:
|
|
6
6
|
|
7
7
|
* Redistributions of source code must retain the above copyright notice,
|
8
8
|
this list of conditions and the following disclaimer.
|
9
|
-
|
9
|
+
|
10
10
|
* Redistributions in binary form must reproduce the above copyright notice,
|
11
11
|
this list of conditions and the following disclaimer in the documentation
|
12
12
|
and/or other materials provided with the distribution.
|
13
|
-
|
14
|
-
* Neither the name of Creationix nor the names of its contributors may
|
15
|
-
used to endorse or promote products derived from this software without
|
13
|
+
|
14
|
+
* Neither the name of the Creationix nor the names of its contributors may
|
15
|
+
be used to endorse or promote products derived from this software without
|
16
16
|
specific prior written permission.
|
17
17
|
|
18
18
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
data/README.rdoc
ADDED
data/Rakefile
CHANGED
@@ -1,16 +1,62 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "milk"
|
8
|
+
gem.summary = %Q{Milk is a rack based content management system built for ease of use and simplicity. Milk tastes great with and without cookies.}
|
9
|
+
gem.email = "tim@creationix.com"
|
10
|
+
gem.homepage = "http://github.com/creationix/milk"
|
11
|
+
gem.authors = ["Tim Caswell"]
|
12
|
+
gem.rubyforge_project = "milk"
|
13
|
+
gem.required_ruby_version = '>=1.9'
|
14
|
+
gem.add_dependency('rack', '>= 1.0.0')
|
15
|
+
gem.add_dependency('maruku', '>= 0.6.0')
|
16
|
+
gem.add_dependency('haml', '>= 2.0.9')
|
17
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
+
end
|
19
|
+
|
20
|
+
Jeweler::RubyforgeTasks.new
|
21
|
+
rescue LoadError
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
4
23
|
end
|
5
24
|
|
6
|
-
|
7
|
-
|
8
|
-
|
25
|
+
require 'rake/testtask'
|
26
|
+
Rake::TestTask.new(:test) do |test|
|
27
|
+
test.libs << 'lib' << 'test'
|
28
|
+
test.pattern = 'test/**/*_test.rb'
|
29
|
+
test.verbose = true
|
9
30
|
end
|
10
31
|
|
11
|
-
|
12
|
-
|
13
|
-
|
32
|
+
begin
|
33
|
+
require 'rcov/rcovtask'
|
34
|
+
Rcov::RcovTask.new do |test|
|
35
|
+
test.libs << 'test'
|
36
|
+
test.pattern = 'test/**/*_test.rb'
|
37
|
+
test.verbose = true
|
38
|
+
end
|
39
|
+
rescue LoadError
|
40
|
+
task :rcov do
|
41
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
42
|
+
end
|
14
43
|
end
|
15
44
|
|
16
45
|
|
46
|
+
task :default => :test
|
47
|
+
|
48
|
+
require 'rake/rdoctask'
|
49
|
+
Rake::RDocTask.new do |rdoc|
|
50
|
+
if File.exist?('VERSION.yml')
|
51
|
+
config = YAML.load(File.read('VERSION.yml'))
|
52
|
+
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
53
|
+
else
|
54
|
+
version = ""
|
55
|
+
end
|
56
|
+
|
57
|
+
rdoc.rdoc_dir = 'rdoc'
|
58
|
+
rdoc.title = "milk #{version}"
|
59
|
+
rdoc.rdoc_files.include('README*')
|
60
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
61
|
+
end
|
62
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.9
|
data/milk.gemspec
CHANGED
@@ -1,22 +1,137 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
1
3
|
Gem::Specification.new do |s|
|
2
|
-
s.
|
3
|
-
s.
|
4
|
-
|
5
|
-
s.
|
6
|
-
|
7
|
-
|
8
|
-
s.
|
9
|
-
s.
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
s.files
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
4
|
+
s.name = %q{milk}
|
5
|
+
s.version = "0.0.9"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Tim Caswell"]
|
9
|
+
s.date = %q{2009-06-25}
|
10
|
+
s.default_executable = %q{milk}
|
11
|
+
s.email = %q{tim@creationix.com}
|
12
|
+
s.executables = ["milk"]
|
13
|
+
s.extra_rdoc_files = [
|
14
|
+
"LICENSE",
|
15
|
+
"README.rdoc"
|
16
|
+
]
|
17
|
+
s.files = [
|
18
|
+
".document",
|
19
|
+
".gitignore",
|
20
|
+
"LICENSE",
|
21
|
+
"README.rdoc",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"bin/milk",
|
25
|
+
"lib/milk.rb",
|
26
|
+
"lib/milk/application.rb",
|
27
|
+
"lib/milk/component.rb",
|
28
|
+
"lib/milk/field.rb",
|
29
|
+
"lib/milk/fields/component.haml",
|
30
|
+
"lib/milk/fields/component_array.haml",
|
31
|
+
"lib/milk/fields/component_array.rb",
|
32
|
+
"lib/milk/fields/image_chooser.haml",
|
33
|
+
"lib/milk/fields/image_chooser.rb",
|
34
|
+
"lib/milk/fields/login.haml",
|
35
|
+
"lib/milk/fields/markdown_field.haml",
|
36
|
+
"lib/milk/fields/markdown_field.rb",
|
37
|
+
"lib/milk/fields/page_chooser.haml",
|
38
|
+
"lib/milk/fields/page_chooser.rb",
|
39
|
+
"lib/milk/fields/sprite_chooser.haml",
|
40
|
+
"lib/milk/fields/sprite_chooser.rb",
|
41
|
+
"lib/milk/fields/text_field.haml",
|
42
|
+
"lib/milk/fields/text_field.rb",
|
43
|
+
"lib/milk/fields/xhtml.haml",
|
44
|
+
"lib/milk/haxe.rb",
|
45
|
+
"lib/milk/page.rb",
|
46
|
+
"lib/milk/tasks.rb",
|
47
|
+
"milk.gemspec",
|
48
|
+
"site_template/Rakefile",
|
49
|
+
"site_template/config.ru",
|
50
|
+
"site_template/config/config.yaml",
|
51
|
+
"site_template/config/foot.yaml",
|
52
|
+
"site_template/config/head.yaml",
|
53
|
+
"site_template/config/users.yaml",
|
54
|
+
"site_template/design/0-reset.sass",
|
55
|
+
"site_template/design/1-text.sass",
|
56
|
+
"site_template/design/960.sass",
|
57
|
+
"site_template/design/body.haml",
|
58
|
+
"site_template/design/body.rb",
|
59
|
+
"site_template/design/button.haml",
|
60
|
+
"site_template/design/button.rb",
|
61
|
+
"site_template/design/foot.haml",
|
62
|
+
"site_template/design/foot.rb",
|
63
|
+
"site_template/design/foot.sass",
|
64
|
+
"site_template/design/head.haml",
|
65
|
+
"site_template/design/head.rb",
|
66
|
+
"site_template/design/head.sass",
|
67
|
+
"site_template/design/page.haml",
|
68
|
+
"site_template/design/page.sass",
|
69
|
+
"site_template/design/sprites.sass",
|
70
|
+
"site_template/design/xhtml.haml",
|
71
|
+
"site_template/pages/About.yaml",
|
72
|
+
"site_template/pages/Home.yaml",
|
73
|
+
"site_template/pages/News.yaml",
|
74
|
+
"site_template/pages/NotFound.yaml",
|
75
|
+
"site_template/pages/Products.yaml",
|
76
|
+
"site_template/public/cache/About/index.html",
|
77
|
+
"site_template/public/cache/Home/index.html",
|
78
|
+
"site_template/public/cache/News/index.html",
|
79
|
+
"site_template/public/cache/Products/index.html",
|
80
|
+
"site_template/public/favicon.ico",
|
81
|
+
"site_template/public/images/README.txt",
|
82
|
+
"site_template/public/js/jquery-1.3.2.min.js",
|
83
|
+
"site_template/public/js/jquery-ui-1.7.2.custom.min.js",
|
84
|
+
"site_template/public/js/jquery.json-1.3.min.js",
|
85
|
+
"site_template/public/robots.txt",
|
86
|
+
"site_template/public/skin/images/ui-bg_diagonals-thick_18_b81900_40x40.png",
|
87
|
+
"site_template/public/skin/images/ui-bg_diagonals-thick_20_666666_40x40.png",
|
88
|
+
"site_template/public/skin/images/ui-bg_flat_10_000000_40x100.png",
|
89
|
+
"site_template/public/skin/images/ui-bg_glass_100_f6f6f6_1x400.png",
|
90
|
+
"site_template/public/skin/images/ui-bg_glass_100_fdf5ce_1x400.png",
|
91
|
+
"site_template/public/skin/images/ui-bg_glass_65_ffffff_1x400.png",
|
92
|
+
"site_template/public/skin/images/ui-bg_gloss-wave_35_f6a828_500x100.png",
|
93
|
+
"site_template/public/skin/images/ui-bg_highlight-soft_100_eeeeee_1x100.png",
|
94
|
+
"site_template/public/skin/images/ui-bg_highlight-soft_75_ffe45c_1x100.png",
|
95
|
+
"site_template/public/skin/images/ui-icons_222222_256x240.png",
|
96
|
+
"site_template/public/skin/images/ui-icons_228ef1_256x240.png",
|
97
|
+
"site_template/public/skin/images/ui-icons_ef8c08_256x240.png",
|
98
|
+
"site_template/public/skin/images/ui-icons_ffd27a_256x240.png",
|
99
|
+
"site_template/public/skin/images/ui-icons_ffffff_256x240.png",
|
100
|
+
"site_template/public/skin/jquery-ui-1.7.2.custom.css",
|
101
|
+
"site_template/public/style/style.css",
|
102
|
+
"site_template/tmp/restart.txt",
|
103
|
+
"test/milk_test.rb",
|
104
|
+
"test/test_helper.rb"
|
105
|
+
]
|
106
|
+
s.has_rdoc = true
|
107
|
+
s.homepage = %q{http://github.com/creationix/milk}
|
108
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
109
|
+
s.require_paths = ["lib"]
|
110
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.9")
|
111
|
+
s.rubyforge_project = %q{milk}
|
112
|
+
s.rubygems_version = %q{1.3.1}
|
113
|
+
s.summary = %q{Milk is a rack based content management system built for ease of use and simplicity. Milk tastes great with and without cookies.}
|
114
|
+
s.test_files = [
|
115
|
+
"test/test_helper.rb",
|
116
|
+
"test/milk_test.rb"
|
117
|
+
]
|
22
118
|
|
119
|
+
if s.respond_to? :specification_version then
|
120
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
121
|
+
s.specification_version = 2
|
122
|
+
|
123
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
124
|
+
s.add_runtime_dependency(%q<rack>, [">= 1.0.0"])
|
125
|
+
s.add_runtime_dependency(%q<maruku>, [">= 0.6.0"])
|
126
|
+
s.add_runtime_dependency(%q<haml>, [">= 2.0.9"])
|
127
|
+
else
|
128
|
+
s.add_dependency(%q<rack>, [">= 1.0.0"])
|
129
|
+
s.add_dependency(%q<maruku>, [">= 0.6.0"])
|
130
|
+
s.add_dependency(%q<haml>, [">= 2.0.9"])
|
131
|
+
end
|
132
|
+
else
|
133
|
+
s.add_dependency(%q<rack>, [">= 1.0.0"])
|
134
|
+
s.add_dependency(%q<maruku>, [">= 0.6.0"])
|
135
|
+
s.add_dependency(%q<haml>, [">= 2.0.9"])
|
136
|
+
end
|
137
|
+
end
|
@@ -25,7 +25,7 @@ SECRET: "098f6bcd4621d373cade4e832627b4f6ad0234829205b9033196ba818f7a872b"
|
|
25
25
|
# # Enable loading page cache files directly
|
26
26
|
# rewrite ^/$ /cache/Home/index.html;
|
27
27
|
# rewrite ^((/[A-Z][A-Za-z]*)+)$ /cache/$1/index.html;
|
28
|
-
USE_CACHE:
|
28
|
+
USE_CACHE: false
|
29
29
|
|
30
|
-
#
|
30
|
+
# You can create any other site wide globals for use in templates here
|
31
31
|
SITE_NAME: "Sample Site"
|
data/test/milk_test.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: milk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Caswell
|
@@ -10,7 +10,7 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
|
12
12
|
date: 2009-06-25 00:00:00 -05:00
|
13
|
-
default_executable:
|
13
|
+
default_executable: milk
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rack
|
@@ -42,138 +42,108 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 2.0.9
|
44
44
|
version:
|
45
|
-
description:
|
45
|
+
description:
|
46
46
|
email: tim@creationix.com
|
47
47
|
executables:
|
48
48
|
- milk
|
49
49
|
extensions: []
|
50
50
|
|
51
|
-
extra_rdoc_files:
|
52
|
-
|
51
|
+
extra_rdoc_files:
|
52
|
+
- LICENSE
|
53
|
+
- README.rdoc
|
53
54
|
files:
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
55
|
+
- .document
|
56
|
+
- .gitignore
|
57
|
+
- LICENSE
|
58
|
+
- README.rdoc
|
59
|
+
- Rakefile
|
60
|
+
- VERSION
|
61
|
+
- bin/milk
|
62
|
+
- lib/milk.rb
|
63
|
+
- lib/milk/application.rb
|
64
|
+
- lib/milk/component.rb
|
65
|
+
- lib/milk/field.rb
|
66
|
+
- lib/milk/fields/component.haml
|
67
|
+
- lib/milk/fields/component_array.haml
|
68
|
+
- lib/milk/fields/component_array.rb
|
69
|
+
- lib/milk/fields/image_chooser.haml
|
70
|
+
- lib/milk/fields/image_chooser.rb
|
71
|
+
- lib/milk/fields/login.haml
|
72
|
+
- lib/milk/fields/markdown_field.haml
|
73
|
+
- lib/milk/fields/markdown_field.rb
|
74
|
+
- lib/milk/fields/page_chooser.haml
|
75
|
+
- lib/milk/fields/page_chooser.rb
|
76
|
+
- lib/milk/fields/sprite_chooser.haml
|
77
|
+
- lib/milk/fields/sprite_chooser.rb
|
78
|
+
- lib/milk/fields/text_field.haml
|
79
|
+
- lib/milk/fields/text_field.rb
|
80
|
+
- lib/milk/fields/xhtml.haml
|
81
|
+
- lib/milk/haxe.rb
|
82
|
+
- lib/milk/page.rb
|
83
|
+
- lib/milk/tasks.rb
|
84
|
+
- milk.gemspec
|
85
|
+
- site_template/Rakefile
|
86
|
+
- site_template/config.ru
|
87
|
+
- site_template/config/config.yaml
|
88
|
+
- site_template/config/foot.yaml
|
89
|
+
- site_template/config/head.yaml
|
90
|
+
- site_template/config/users.yaml
|
91
|
+
- site_template/design/0-reset.sass
|
92
|
+
- site_template/design/1-text.sass
|
93
|
+
- site_template/design/960.sass
|
94
|
+
- site_template/design/body.haml
|
95
|
+
- site_template/design/body.rb
|
96
|
+
- site_template/design/button.haml
|
97
|
+
- site_template/design/button.rb
|
98
|
+
- site_template/design/foot.haml
|
99
|
+
- site_template/design/foot.rb
|
100
|
+
- site_template/design/foot.sass
|
101
|
+
- site_template/design/head.haml
|
102
|
+
- site_template/design/head.rb
|
103
|
+
- site_template/design/head.sass
|
104
|
+
- site_template/design/page.haml
|
105
|
+
- site_template/design/page.sass
|
106
|
+
- site_template/design/sprites.sass
|
107
|
+
- site_template/design/xhtml.haml
|
108
|
+
- site_template/pages/About.yaml
|
109
|
+
- site_template/pages/Home.yaml
|
110
|
+
- site_template/pages/News.yaml
|
111
|
+
- site_template/pages/NotFound.yaml
|
112
|
+
- site_template/pages/Products.yaml
|
113
|
+
- site_template/public/cache/About/index.html
|
114
|
+
- site_template/public/cache/Home/index.html
|
115
|
+
- site_template/public/cache/News/index.html
|
116
|
+
- site_template/public/cache/Products/index.html
|
117
|
+
- site_template/public/favicon.ico
|
118
|
+
- site_template/public/images/README.txt
|
119
|
+
- site_template/public/js/jquery-1.3.2.min.js
|
120
|
+
- site_template/public/js/jquery-ui-1.7.2.custom.min.js
|
121
|
+
- site_template/public/js/jquery.json-1.3.min.js
|
122
|
+
- site_template/public/robots.txt
|
123
|
+
- site_template/public/skin/images/ui-bg_diagonals-thick_18_b81900_40x40.png
|
58
124
|
- site_template/public/skin/images/ui-bg_diagonals-thick_20_666666_40x40.png
|
59
|
-
- site_template/public/skin/images/ui-icons_ffd27a_256x240.png
|
60
|
-
- site_template/public/skin/images/ui-bg_gloss-wave_35_f6a828_500x100.png
|
61
|
-
- site_template/public/skin/images/ui-bg_glass_100_f6f6f6_1x400.png
|
62
125
|
- site_template/public/skin/images/ui-bg_flat_10_000000_40x100.png
|
63
|
-
- site_template/public/skin/images/ui-
|
64
|
-
- site_template/public/skin/images/ui-icons_ffffff_256x240.png
|
126
|
+
- site_template/public/skin/images/ui-bg_glass_100_f6f6f6_1x400.png
|
65
127
|
- site_template/public/skin/images/ui-bg_glass_100_fdf5ce_1x400.png
|
66
|
-
- site_template/public/skin/images/ui-bg_diagonals-thick_18_b81900_40x40.png
|
67
128
|
- site_template/public/skin/images/ui-bg_glass_65_ffffff_1x400.png
|
68
|
-
- site_template/public/skin/images/ui-
|
129
|
+
- site_template/public/skin/images/ui-bg_gloss-wave_35_f6a828_500x100.png
|
130
|
+
- site_template/public/skin/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
|
69
131
|
- site_template/public/skin/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
|
70
132
|
- site_template/public/skin/images/ui-icons_222222_256x240.png
|
133
|
+
- site_template/public/skin/images/ui-icons_228ef1_256x240.png
|
71
134
|
- site_template/public/skin/images/ui-icons_ef8c08_256x240.png
|
135
|
+
- site_template/public/skin/images/ui-icons_ffd27a_256x240.png
|
136
|
+
- site_template/public/skin/images/ui-icons_ffffff_256x240.png
|
72
137
|
- site_template/public/skin/jquery-ui-1.7.2.custom.css
|
73
|
-
- site_template/public/robots.txt
|
74
|
-
- site_template/public/style
|
75
138
|
- site_template/public/style/style.css
|
76
|
-
- site_template/public/js
|
77
|
-
- site_template/public/js/jquery.json-1.3.min.js
|
78
|
-
- site_template/public/js/jquery-1.3.2.min.js
|
79
|
-
- site_template/public/js/jquery-ui-1.7.2.custom.min.js
|
80
|
-
- site_template/public/images
|
81
|
-
- site_template/public/images/README.txt
|
82
|
-
- site_template/public/cache
|
83
|
-
- site_template/public/cache/Home
|
84
|
-
- site_template/public/cache/Home/index.html
|
85
|
-
- site_template/public/cache/Products
|
86
|
-
- site_template/public/cache/Products/index.html
|
87
|
-
- site_template/public/cache/News
|
88
|
-
- site_template/public/cache/News/index.html
|
89
|
-
- site_template/public/cache/About
|
90
|
-
- site_template/public/cache/About/index.html
|
91
|
-
- site_template/public/favicon.ico
|
92
|
-
- site_template/tmp
|
93
139
|
- site_template/tmp/restart.txt
|
94
|
-
-
|
95
|
-
-
|
96
|
-
- site_template/design/head.sass
|
97
|
-
- site_template/design/foot.haml
|
98
|
-
- site_template/design/body.rb
|
99
|
-
- site_template/design/head.rb
|
100
|
-
- site_template/design/1-text.sass
|
101
|
-
- site_template/design/960.sass
|
102
|
-
- site_template/design/sprites.sass
|
103
|
-
- site_template/design/head.haml
|
104
|
-
- site_template/design/page.sass
|
105
|
-
- site_template/design/foot.rb
|
106
|
-
- site_template/design/page.haml
|
107
|
-
- site_template/design/xhtml.haml
|
108
|
-
- site_template/design/button.haml
|
109
|
-
- site_template/design/foot.sass
|
110
|
-
- site_template/design/0-reset.sass
|
111
|
-
- site_template/design/body.haml
|
112
|
-
- site_template/design/button.rb
|
113
|
-
- site_template/pages
|
114
|
-
- site_template/pages/Home.yaml.~5~
|
115
|
-
- site_template/pages/News.yaml
|
116
|
-
- site_template/pages/Home.yaml.~1~
|
117
|
-
- site_template/pages/Home.yaml.~4~
|
118
|
-
- site_template/pages/NotFound.yaml
|
119
|
-
- site_template/pages/Home.yaml.~3~
|
120
|
-
- site_template/pages/Home.yaml
|
121
|
-
- site_template/pages/Products.yaml
|
122
|
-
- site_template/pages/About.yaml
|
123
|
-
- site_template/pages/Home.yaml.~2~
|
124
|
-
- site_template/config
|
125
|
-
- site_template/config/foot.yaml.~5~
|
126
|
-
- site_template/config/foot.yaml.~4~
|
127
|
-
- site_template/config/head.yaml
|
128
|
-
- site_template/config/head.yaml.~5~
|
129
|
-
- site_template/config/head.yaml.~1~
|
130
|
-
- site_template/config/users.yaml
|
131
|
-
- site_template/config/head.yaml.~2~
|
132
|
-
- site_template/config/config.yaml
|
133
|
-
- site_template/config/head.yaml.~4~
|
134
|
-
- site_template/config/foot.yaml.~1~
|
135
|
-
- site_template/config/foot.yaml
|
136
|
-
- site_template/config/foot.yaml.~2~
|
137
|
-
- site_template/config/foot.yaml.~3~
|
138
|
-
- site_template/config/head.yaml.~3~
|
139
|
-
- site_template/Rakefile
|
140
|
-
- lib
|
141
|
-
- lib/milk
|
142
|
-
- lib/milk/page.rb
|
143
|
-
- lib/milk/haxe.rb
|
144
|
-
- lib/milk/tasks.rb
|
145
|
-
- lib/milk/field.rb
|
146
|
-
- lib/milk/fields
|
147
|
-
- lib/milk/fields/markdown_field.haml
|
148
|
-
- lib/milk/fields/page_chooser.haml
|
149
|
-
- lib/milk/fields/text_field.rb
|
150
|
-
- lib/milk/fields/image_chooser.haml
|
151
|
-
- lib/milk/fields/login.haml
|
152
|
-
- lib/milk/fields/text_field.haml
|
153
|
-
- lib/milk/fields/sprite_chooser.rb
|
154
|
-
- lib/milk/fields/xhtml.haml
|
155
|
-
- lib/milk/fields/component_array.rb
|
156
|
-
- lib/milk/fields/page_chooser.rb
|
157
|
-
- lib/milk/fields/image_chooser.rb
|
158
|
-
- lib/milk/fields/sprite_chooser.haml
|
159
|
-
- lib/milk/fields/markdown_field.rb
|
160
|
-
- lib/milk/fields/component_array.haml
|
161
|
-
- lib/milk/fields/component.haml
|
162
|
-
- lib/milk/component.rb.~1~
|
163
|
-
- lib/milk/page.rb.~1~
|
164
|
-
- lib/milk/component.rb
|
165
|
-
- lib/milk/application.rb
|
166
|
-
- lib/milk.rb
|
167
|
-
- LICENSE
|
168
|
-
- Rakefile
|
169
|
-
- milk.gemspec
|
170
|
-
- bin
|
171
|
-
- bin/milk
|
140
|
+
- test/milk_test.rb
|
141
|
+
- test/test_helper.rb
|
172
142
|
has_rdoc: true
|
173
|
-
homepage: http://milk
|
143
|
+
homepage: http://github.com/creationix/milk
|
174
144
|
post_install_message:
|
175
|
-
rdoc_options:
|
176
|
-
|
145
|
+
rdoc_options:
|
146
|
+
- --charset=UTF-8
|
177
147
|
require_paths:
|
178
148
|
- lib
|
179
149
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -188,12 +158,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
158
|
- !ruby/object:Gem::Version
|
189
159
|
version: "0"
|
190
160
|
version:
|
191
|
-
requirements:
|
192
|
-
|
161
|
+
requirements: []
|
162
|
+
|
193
163
|
rubyforge_project: milk
|
194
164
|
rubygems_version: 1.3.1
|
195
165
|
signing_key:
|
196
166
|
specification_version: 2
|
197
167
|
summary: Milk is a rack based content management system built for ease of use and simplicity. Milk tastes great with and without cookies.
|
198
|
-
test_files:
|
199
|
-
|
168
|
+
test_files:
|
169
|
+
- test/test_helper.rb
|
170
|
+
- test/milk_test.rb
|
data/lib/milk/component.rb.~1~
DELETED
@@ -1,141 +0,0 @@
|
|
1
|
-
module Milk
|
2
|
-
class Component
|
3
|
-
|
4
|
-
@@local_flag = {}
|
5
|
-
|
6
|
-
attr_accessor :parent
|
7
|
-
@parent = nil
|
8
|
-
|
9
|
-
|
10
|
-
# Don't store global properties or backreferences to the parent
|
11
|
-
def to_yaml_properties
|
12
|
-
(if respond_to? :global_properties
|
13
|
-
instance_variables.reject { |name| global_properties.member?(name) }
|
14
|
-
else
|
15
|
-
instance_variables
|
16
|
-
end).reject { |name| name == :@parent }
|
17
|
-
end
|
18
|
-
|
19
|
-
def app
|
20
|
-
page.app
|
21
|
-
end
|
22
|
-
|
23
|
-
def page
|
24
|
-
if @parent.class == Milk::Page
|
25
|
-
@parent
|
26
|
-
else
|
27
|
-
@parent.page
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.local_properties(*props)
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.global_properties(*props)
|
35
|
-
globals = props.collect{|name|"@#{name}".to_sym}
|
36
|
-
class_def :global_properties do
|
37
|
-
globals
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def name
|
42
|
-
self.class.to_s
|
43
|
-
end
|
44
|
-
|
45
|
-
# All Components start out with default of no fields
|
46
|
-
def self.fields
|
47
|
-
[]
|
48
|
-
end
|
49
|
-
|
50
|
-
# Assume no defaults
|
51
|
-
def self.defaults
|
52
|
-
{}
|
53
|
-
end
|
54
|
-
|
55
|
-
# Metaclass black magic to simulate appending items to a list
|
56
|
-
# This works by getting the old result of the fields class method
|
57
|
-
# and stores it in a closure, and then redefines the method, but with
|
58
|
-
# a new item appended.
|
59
|
-
def self.add_field(klass, field, label, options={})
|
60
|
-
|
61
|
-
# Merge in assumes options
|
62
|
-
options[:field] = field
|
63
|
-
options[:label] = label
|
64
|
-
|
65
|
-
# Fill in blanks with defaults
|
66
|
-
defaults.each do |k, v|
|
67
|
-
options[k] ||= v
|
68
|
-
end
|
69
|
-
|
70
|
-
field = klass.new(options)
|
71
|
-
|
72
|
-
newfields = self.fields + [field]
|
73
|
-
meta_def("fields") do
|
74
|
-
newfields
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def self.method_missing(method, *args)
|
79
|
-
raise "Missing '#{method}' method" unless File.file? FIELDS_DIR+"/#{method}.rb"
|
80
|
-
klass = eval("Fields::" + method.to_s.gsub(/(^|_)(.)/) { $2.upcase })
|
81
|
-
add_field(klass, *args)
|
82
|
-
end
|
83
|
-
|
84
|
-
def save_settings
|
85
|
-
return unless respond_to? :global_properties
|
86
|
-
yaml_file = Milk::CONFIG_DIR + "/#{system_name}.yaml"
|
87
|
-
data = {}
|
88
|
-
instance_variables.each do |name|
|
89
|
-
data[name] = instance_variable_get(name)
|
90
|
-
end
|
91
|
-
File.open(yaml_file, "w") do |file|
|
92
|
-
file.write(data)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def system_name
|
97
|
-
self.class.to_s.gsub(/([a-z])([A-Z])/) { "#{$1}_#{$2}" }.downcase
|
98
|
-
end
|
99
|
-
|
100
|
-
def load_settings
|
101
|
-
yaml_file = Milk::CONFIG_DIR + "/#{system_name}.yaml"
|
102
|
-
if File.file? yaml_file
|
103
|
-
YAML.load_file(yaml_file).each_pair do |key, value|
|
104
|
-
instance_variable_set("@#{key}".to_sym, value)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def haml(filename, context=self, extras={})
|
110
|
-
if block_given?
|
111
|
-
Page.haml(filename, context, extras) { yield }
|
112
|
-
else
|
113
|
-
Page.haml(filename, context, extras)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def partial(filename, vars, extras={})
|
118
|
-
obj = self.dup
|
119
|
-
vars.each do |key, value|
|
120
|
-
obj.instance_variable_set("@#{key}", value)
|
121
|
-
end
|
122
|
-
haml(filename, obj, extras)
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
def edit(prefix)
|
127
|
-
@prefix = prefix
|
128
|
-
haml_file = FIELDS_DIR + "/component.haml"
|
129
|
-
::Haml::Engine.new(File.read(haml_file), :filename => haml_file).render(self)
|
130
|
-
end
|
131
|
-
|
132
|
-
def view
|
133
|
-
haml_file = Milk::COMPONENTS_DIR + "/" + system_name + ".haml"
|
134
|
-
raise "Missing template \"" + haml_file + "\"" unless File.file? haml_file
|
135
|
-
::Haml::Engine.new(File.read(haml_file), :filename => haml_file).render(self)
|
136
|
-
end
|
137
|
-
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
|
data/lib/milk/page.rb.~1~
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
module Milk
|
2
|
-
class Page
|
3
|
-
|
4
|
-
attr_reader :title
|
5
|
-
attr_reader :description
|
6
|
-
attr_reader :pagename
|
7
|
-
|
8
|
-
def self.find(pagename)
|
9
|
-
yaml_file = Milk::PAGES_DIR + "/" + pagename + ".yaml"
|
10
|
-
raise PageNotFoundError unless File.readable? yaml_file
|
11
|
-
page = YAML.load_file(yaml_file)
|
12
|
-
page.instance_variable_set('@pagename', pagename)
|
13
|
-
page.load_settings
|
14
|
-
page
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.haml(filename, context, extras)
|
18
|
-
if block_given?
|
19
|
-
::Haml::Engine.new(File.read(filename), :filename => filename).render(context, extras) do
|
20
|
-
yield
|
21
|
-
end
|
22
|
-
else
|
23
|
-
::Haml::Engine.new(File.read(filename), :filename => filename).render(context, extras)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def haml(filename, context=self, extras={})
|
28
|
-
if block_given?
|
29
|
-
Page.haml(filename, context, extras) { yield }
|
30
|
-
else
|
31
|
-
Page.haml(filename, context, extras)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def to_yaml_properties
|
36
|
-
[:@components, :@title, :@keywords, :@description]
|
37
|
-
end
|
38
|
-
|
39
|
-
def save
|
40
|
-
save_settings
|
41
|
-
yaml_file = Milk::PAGES_DIR + "/" + @pagename + ".yaml"
|
42
|
-
data = YAML.dump(self)
|
43
|
-
File.open(yaml_file, "w") do |file|
|
44
|
-
file.write(data)
|
45
|
-
end
|
46
|
-
data
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.json_unserialize(data, pagename=nil)
|
50
|
-
class_name = data.delete('class')
|
51
|
-
obj = class_name.constantize.allocate
|
52
|
-
data.each do |key, value|
|
53
|
-
if value.class == Array
|
54
|
-
value.collect! { |item| json_unserialize(item) }
|
55
|
-
end
|
56
|
-
obj.instance_variable_set("@#{key}", value)
|
57
|
-
end
|
58
|
-
obj.instance_variable_set("@pagename", pagename) if obj.class == Milk::Page
|
59
|
-
obj
|
60
|
-
end
|
61
|
-
|
62
|
-
def load_settings
|
63
|
-
@components.each do |component|
|
64
|
-
component.load_settings
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def save_settings
|
69
|
-
@components.each do |component|
|
70
|
-
component.save_settings
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def edit
|
75
|
-
haml(FIELDS_DIR + "/xhtml.haml", self)
|
76
|
-
end
|
77
|
-
|
78
|
-
def preview
|
79
|
-
haml(Milk::COMPONENTS_DIR + "/page.haml", self) do
|
80
|
-
(@components.collect do |component|
|
81
|
-
component.view
|
82
|
-
end).join("")
|
83
|
-
end + @app.req.env.inspect
|
84
|
-
end
|
85
|
-
|
86
|
-
def view
|
87
|
-
haml(Milk::COMPONENTS_DIR + "/xhtml.haml", self) do
|
88
|
-
preview
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def link_to
|
93
|
-
if @pagename == "Home"
|
94
|
-
"/"
|
95
|
-
else
|
96
|
-
"/#{@pagename}"
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def link_to?(url)
|
101
|
-
(@pagename == "Home" && url == '/') || url == "/#{@pagename}"
|
102
|
-
end
|
103
|
-
|
104
|
-
def save_to_cache(html=nil)
|
105
|
-
html ||= view
|
106
|
-
folder = Milk::PUBLIC_DIR + "/cache/" + @pagename
|
107
|
-
cache_file = folder + "/index.html"
|
108
|
-
|
109
|
-
# Make the folder if it doesn't exist
|
110
|
-
FileUtils.mkdir_p folder
|
111
|
-
open(cache_file, "w") { |file| file.write html }
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
|
118
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
{:@markdown=>"© 2009 Your company name here. - Hosted on the [Milk] framework.\n\n[Milk]: http://milk.rubyforge.org/"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{:@buttons=>[#<Button:0x00000002722278 @href="/Home", @title="Home relabeled", @description="Description of home page", @parent=#<Head:0x00000002722368 @buttons=[...], @parent=#<Milk::Page:0x00000002722548 @components=[#<Head:0x00000002722368 ...>, #<Body:0x00000002721a30 @markdown="# Home more\n\nDescription of home page", @parent=#<Milk::Page:0x00000002722548 ...>>, #<Foot:0x00000002721918 @markdown="© 2009 Your company name here. - Hosted on the [Milk] framework.\n\n[Milk]: http://milk.rubyforge.org/", @parent=#<Milk::Page:0x00000002722548 ...>>], @title="Home", @keywords="keywords, that, are, relevent, to, search, engines", @description="This is a description of this site.", @pagename="Home", @parent=#<Milk::Application:0x00000001677f90 @require_ssl=false, @req=#<Rack::Request:0x00000002729410 @env={"SERVER_SOFTWARE"=>"thin 1.2.2 codename I Find Your Lack of Sauce Disturbing", "SERVER_NAME"=>"localhost", "rack.input"=>#<Rack::Lint::InputWrapper:0x00000002729de8 @input=#<StringIO:0x000000023d2758>>, "rack.version"=>[1, 0], "rack.errors"=>#<Rack::Lint::ErrorWrapper:0x00000002729d70 @error=#<IO:<STDERR>>>, "rack.multithread"=>false, "rack.multiprocess"=>false, "rack.run_once"=>false, "REQUEST_METHOD"=>"PUT", "REQUEST_PATH"=>"/Home", "PATH_INFO"=>"/Home", "REQUEST_URI"=>"/Home", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HOST"=>"localhost:9292", "HTTP_USER_AGENT"=>"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.04 (jaunty) Firefox/3.0.11", "HTTP_ACCEPT"=>"*/*", "HTTP_ACCEPT_LANGUAGE"=>"en-us,en;q=0.5", "HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_ACCEPT_CHARSET"=>"ISO-8859-1,utf-8;q=0.7,*;q=0.7", "HTTP_KEEP_ALIVE"=>"300", "HTTP_CONNECTION"=>"keep-alive", "HTTP_X_REQUESTED_WITH"=>"XMLHttpRequest", "HTTP_REFERER"=>"http://localhost:9292/Home/edit", "HTTP_COOKIE"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "CONTENT_LENGTH"=>"840", "CONTENT_TYPE"=>"application/json; charset=UTF-8", "GATEWAY_INTERFACE"=>"CGI/1.2", "SERVER_PORT"=>"9292", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "rack.url_scheme"=>"http", "SCRIPT_NAME"=>"", "REMOTE_ADDR"=>"127.0.0.1", "async.callback"=>#<Method: Thin::Connection#post_process>, "async.close"=>#<EventMachine::DefaultDeferrable:0x000000023f1b30>, "rack.request"=>#<Rack::Request:0x00000002729410 ...>, "rack.request.cookie_string"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "rack.request.cookie_hash"=>{"auth"=>"UV1VD1giBhxVW0JdAR1UXA4=\n"}}>, @resp=#<Rack::Response:0x000000027293c0 @status=200, @header={"Content-Type"=>"text/html"}, @writer=#<Proc:0x00000002729168@/home/tim/local/lib/ruby/gems/1.9.1/gems/rack-1.0.0/lib/rack/response.rb:26 (lambda)>, @block=nil, @length=0, @body=[]>, @user={"name"=>"Sample Admin", "hash"=>"098f6bcd4621d373cade4e832627b4f6"}, @page=#<Milk::Page:0x00000002722548 ...>, @_haml_locals={:_hamlout=>#<Haml::Buffer:0x0000000225db20 @active=true, @upper=nil, @options={:attr_wrapper=>"'", :ugly=>false, :format=>:xhtml, :autoclose=>["meta", "img", "link", "br", "hr", "input", "area", "param", "col", "base"], :preserve=>["textarea", "pre"]}, @buffer="<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n", @tabulation=0, @real_tabs=0, @dont_tab_up_next_line=false>, :_erbout=>"<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n"}, @haml_buffer=nil>>>>, #<Button:0x000000027220c0 @href="/News", @title="News", @description="Description of news page", @parent=#<Head:0x00000002722368 @buttons=[...], @parent=#<Milk::Page:0x00000002722548 @components=[#<Head:0x00000002722368 ...>, #<Body:0x00000002721a30 @markdown="# Home more\n\nDescription of home page", @parent=#<Milk::Page:0x00000002722548 ...>>, #<Foot:0x00000002721918 @markdown="© 2009 Your company name here. - Hosted on the [Milk] framework.\n\n[Milk]: http://milk.rubyforge.org/", @parent=#<Milk::Page:0x00000002722548 ...>>], @title="Home", @keywords="keywords, that, are, relevent, to, search, engines", @description="This is a description of this site.", @pagename="Home", @parent=#<Milk::Application:0x00000001677f90 @require_ssl=false, @req=#<Rack::Request:0x00000002729410 @env={"SERVER_SOFTWARE"=>"thin 1.2.2 codename I Find Your Lack of Sauce Disturbing", "SERVER_NAME"=>"localhost", "rack.input"=>#<Rack::Lint::InputWrapper:0x00000002729de8 @input=#<StringIO:0x000000023d2758>>, "rack.version"=>[1, 0], "rack.errors"=>#<Rack::Lint::ErrorWrapper:0x00000002729d70 @error=#<IO:<STDERR>>>, "rack.multithread"=>false, "rack.multiprocess"=>false, "rack.run_once"=>false, "REQUEST_METHOD"=>"PUT", "REQUEST_PATH"=>"/Home", "PATH_INFO"=>"/Home", "REQUEST_URI"=>"/Home", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HOST"=>"localhost:9292", "HTTP_USER_AGENT"=>"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.04 (jaunty) Firefox/3.0.11", "HTTP_ACCEPT"=>"*/*", "HTTP_ACCEPT_LANGUAGE"=>"en-us,en;q=0.5", "HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_ACCEPT_CHARSET"=>"ISO-8859-1,utf-8;q=0.7,*;q=0.7", "HTTP_KEEP_ALIVE"=>"300", "HTTP_CONNECTION"=>"keep-alive", "HTTP_X_REQUESTED_WITH"=>"XMLHttpRequest", "HTTP_REFERER"=>"http://localhost:9292/Home/edit", "HTTP_COOKIE"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "CONTENT_LENGTH"=>"840", "CONTENT_TYPE"=>"application/json; charset=UTF-8", "GATEWAY_INTERFACE"=>"CGI/1.2", "SERVER_PORT"=>"9292", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "rack.url_scheme"=>"http", "SCRIPT_NAME"=>"", "REMOTE_ADDR"=>"127.0.0.1", "async.callback"=>#<Method: Thin::Connection#post_process>, "async.close"=>#<EventMachine::DefaultDeferrable:0x000000023f1b30>, "rack.request"=>#<Rack::Request:0x00000002729410 ...>, "rack.request.cookie_string"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "rack.request.cookie_hash"=>{"auth"=>"UV1VD1giBhxVW0JdAR1UXA4=\n"}}>, @resp=#<Rack::Response:0x000000027293c0 @status=200, @header={"Content-Type"=>"text/html"}, @writer=#<Proc:0x00000002729168@/home/tim/local/lib/ruby/gems/1.9.1/gems/rack-1.0.0/lib/rack/response.rb:26 (lambda)>, @block=nil, @length=0, @body=[]>, @user={"name"=>"Sample Admin", "hash"=>"098f6bcd4621d373cade4e832627b4f6"}, @page=#<Milk::Page:0x00000002722548 ...>, @_haml_locals={:_hamlout=>#<Haml::Buffer:0x0000000225db20 @active=true, @upper=nil, @options={:attr_wrapper=>"'", :ugly=>false, :format=>:xhtml, :autoclose=>["meta", "img", "link", "br", "hr", "input", "area", "param", "col", "base"], :preserve=>["textarea", "pre"]}, @buffer="<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n", @tabulation=0, @real_tabs=0, @dont_tab_up_next_line=false>, :_erbout=>"<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n"}, @haml_buffer=nil>>>>, #<Button:0x00000002721e68 @href="/Products", @title="Products", @description="Description of products page", @parent=#<Head:0x00000002722368 @buttons=[...], @parent=#<Milk::Page:0x00000002722548 @components=[#<Head:0x00000002722368 ...>, #<Body:0x00000002721a30 @markdown="# Home more\n\nDescription of home page", @parent=#<Milk::Page:0x00000002722548 ...>>, #<Foot:0x00000002721918 @markdown="© 2009 Your company name here. - Hosted on the [Milk] framework.\n\n[Milk]: http://milk.rubyforge.org/", @parent=#<Milk::Page:0x00000002722548 ...>>], @title="Home", @keywords="keywords, that, are, relevent, to, search, engines", @description="This is a description of this site.", @pagename="Home", @parent=#<Milk::Application:0x00000001677f90 @require_ssl=false, @req=#<Rack::Request:0x00000002729410 @env={"SERVER_SOFTWARE"=>"thin 1.2.2 codename I Find Your Lack of Sauce Disturbing", "SERVER_NAME"=>"localhost", "rack.input"=>#<Rack::Lint::InputWrapper:0x00000002729de8 @input=#<StringIO:0x000000023d2758>>, "rack.version"=>[1, 0], "rack.errors"=>#<Rack::Lint::ErrorWrapper:0x00000002729d70 @error=#<IO:<STDERR>>>, "rack.multithread"=>false, "rack.multiprocess"=>false, "rack.run_once"=>false, "REQUEST_METHOD"=>"PUT", "REQUEST_PATH"=>"/Home", "PATH_INFO"=>"/Home", "REQUEST_URI"=>"/Home", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HOST"=>"localhost:9292", "HTTP_USER_AGENT"=>"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.04 (jaunty) Firefox/3.0.11", "HTTP_ACCEPT"=>"*/*", "HTTP_ACCEPT_LANGUAGE"=>"en-us,en;q=0.5", "HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_ACCEPT_CHARSET"=>"ISO-8859-1,utf-8;q=0.7,*;q=0.7", "HTTP_KEEP_ALIVE"=>"300", "HTTP_CONNECTION"=>"keep-alive", "HTTP_X_REQUESTED_WITH"=>"XMLHttpRequest", "HTTP_REFERER"=>"http://localhost:9292/Home/edit", "HTTP_COOKIE"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "CONTENT_LENGTH"=>"840", "CONTENT_TYPE"=>"application/json; charset=UTF-8", "GATEWAY_INTERFACE"=>"CGI/1.2", "SERVER_PORT"=>"9292", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "rack.url_scheme"=>"http", "SCRIPT_NAME"=>"", "REMOTE_ADDR"=>"127.0.0.1", "async.callback"=>#<Method: Thin::Connection#post_process>, "async.close"=>#<EventMachine::DefaultDeferrable:0x000000023f1b30>, "rack.request"=>#<Rack::Request:0x00000002729410 ...>, "rack.request.cookie_string"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "rack.request.cookie_hash"=>{"auth"=>"UV1VD1giBhxVW0JdAR1UXA4=\n"}}>, @resp=#<Rack::Response:0x000000027293c0 @status=200, @header={"Content-Type"=>"text/html"}, @writer=#<Proc:0x00000002729168@/home/tim/local/lib/ruby/gems/1.9.1/gems/rack-1.0.0/lib/rack/response.rb:26 (lambda)>, @block=nil, @length=0, @body=[]>, @user={"name"=>"Sample Admin", "hash"=>"098f6bcd4621d373cade4e832627b4f6"}, @page=#<Milk::Page:0x00000002722548 ...>, @_haml_locals={:_hamlout=>#<Haml::Buffer:0x0000000225db20 @active=true, @upper=nil, @options={:attr_wrapper=>"'", :ugly=>false, :format=>:xhtml, :autoclose=>["meta", "img", "link", "br", "hr", "input", "area", "param", "col", "base"], :preserve=>["textarea", "pre"]}, @buffer="<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n", @tabulation=0, @real_tabs=0, @dont_tab_up_next_line=false>, :_erbout=>"<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n"}, @haml_buffer=nil>>>>, #<Button:0x00000002721cb0 @href="/About", @title="About Us", @description="Description of about page", @parent=#<Head:0x00000002722368 @buttons=[...], @parent=#<Milk::Page:0x00000002722548 @components=[#<Head:0x00000002722368 ...>, #<Body:0x00000002721a30 @markdown="# Home more\n\nDescription of home page", @parent=#<Milk::Page:0x00000002722548 ...>>, #<Foot:0x00000002721918 @markdown="© 2009 Your company name here. - Hosted on the [Milk] framework.\n\n[Milk]: http://milk.rubyforge.org/", @parent=#<Milk::Page:0x00000002722548 ...>>], @title="Home", @keywords="keywords, that, are, relevent, to, search, engines", @description="This is a description of this site.", @pagename="Home", @parent=#<Milk::Application:0x00000001677f90 @require_ssl=false, @req=#<Rack::Request:0x00000002729410 @env={"SERVER_SOFTWARE"=>"thin 1.2.2 codename I Find Your Lack of Sauce Disturbing", "SERVER_NAME"=>"localhost", "rack.input"=>#<Rack::Lint::InputWrapper:0x00000002729de8 @input=#<StringIO:0x000000023d2758>>, "rack.version"=>[1, 0], "rack.errors"=>#<Rack::Lint::ErrorWrapper:0x00000002729d70 @error=#<IO:<STDERR>>>, "rack.multithread"=>false, "rack.multiprocess"=>false, "rack.run_once"=>false, "REQUEST_METHOD"=>"PUT", "REQUEST_PATH"=>"/Home", "PATH_INFO"=>"/Home", "REQUEST_URI"=>"/Home", "HTTP_VERSION"=>"HTTP/1.1", "HTTP_HOST"=>"localhost:9292", "HTTP_USER_AGENT"=>"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.04 (jaunty) Firefox/3.0.11", "HTTP_ACCEPT"=>"*/*", "HTTP_ACCEPT_LANGUAGE"=>"en-us,en;q=0.5", "HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_ACCEPT_CHARSET"=>"ISO-8859-1,utf-8;q=0.7,*;q=0.7", "HTTP_KEEP_ALIVE"=>"300", "HTTP_CONNECTION"=>"keep-alive", "HTTP_X_REQUESTED_WITH"=>"XMLHttpRequest", "HTTP_REFERER"=>"http://localhost:9292/Home/edit", "HTTP_COOKIE"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "CONTENT_LENGTH"=>"840", "CONTENT_TYPE"=>"application/json; charset=UTF-8", "GATEWAY_INTERFACE"=>"CGI/1.2", "SERVER_PORT"=>"9292", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "rack.url_scheme"=>"http", "SCRIPT_NAME"=>"", "REMOTE_ADDR"=>"127.0.0.1", "async.callback"=>#<Method: Thin::Connection#post_process>, "async.close"=>#<EventMachine::DefaultDeferrable:0x000000023f1b30>, "rack.request"=>#<Rack::Request:0x00000002729410 ...>, "rack.request.cookie_string"=>"auth=UV1VD1giBhxVW0JdAR1UXA4%3D%0A", "rack.request.cookie_hash"=>{"auth"=>"UV1VD1giBhxVW0JdAR1UXA4=\n"}}>, @resp=#<Rack::Response:0x000000027293c0 @status=200, @header={"Content-Type"=>"text/html"}, @writer=#<Proc:0x00000002729168@/home/tim/local/lib/ruby/gems/1.9.1/gems/rack-1.0.0/lib/rack/response.rb:26 (lambda)>, @block=nil, @length=0, @body=[]>, @user={"name"=>"Sample Admin", "hash"=>"098f6bcd4621d373cade4e832627b4f6"}, @page=#<Milk::Page:0x00000002722548 ...>, @_haml_locals={:_hamlout=>#<Haml::Buffer:0x0000000225db20 @active=true, @upper=nil, @options={:attr_wrapper=>"'", :ugly=>false, :format=>:xhtml, :autoclose=>["meta", "img", "link", "br", "hr", "input", "area", "param", "col", "base"], :preserve=>["textarea", "pre"]}, @buffer="<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n", @tabulation=0, @real_tabs=0, @dont_tab_up_next_line=false>, :_erbout=>"<?xml version='1.0' encoding='utf-8' ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns='http://www.w3.org/1999/xhtml'>\n <head>\n <title>Please Login</title>\n <style type='text/css'>\n table, #shadow, .ui-widget-shadow {\n width: 400px;\n height: 160px; }\n \n table#login, #shadow {\n font-size: 15px;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -80px;\n margin-left: -200px; }\n \n table#login td, table#login th {\n vertical-align: middle; }\n \n #login tr.ui-state-error {\n font-size: 12px; }\n #login tr.ui-state-error td {\n padding: 5px 10px; }\n #login tr.ui-state-error span {\n float: left;\n margin-right: 0.3em; }\n #login .ui-widget-header {\n line-height: 2em;\n height: 2em; }\n #login button {\n font-size: 12px;\n cursor: pointer;\n line-height: 1em;\n padding: 2px 5px 2px 2px; }\n #login button .ui-icon {\n float: left;\n line-height: 1em; }\n </style>\n <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon' />\n <link href='/skin/jquery-ui-1.7.2.custom.css' media='screen' rel='stylesheet' type='text/css' />\n <link href='/style/style.css' media='screen' rel='stylesheet' type='text/css' />\n <script src='/js/jquery-1.3.2.min.js' type='text/javascript'></script>\n <script src='/js/jquery.json-1.3.min.js' type='text/javascript'></script>\n <script src='/js/jquery-ui-1.7.2.custom.min.js' type='text/javascript'></script>\n </head>\n <body>\n <div class='ui-widget-overlay'></div>\n <form action='/login' method='post'>\n <input name='dest' type='hidden' value='/Home/edit' />\n <div id='shadow'>\n <div class='ui-widget-shadow'></div>\n </div>\n <table class='ui-widget ui-widget-content ui-corner-all' id='login'>\n <thead>\n <tr>\n <th class='ui-widget-header ui-corner-top' colspan='2'>\n Please Login to edit 'Home'\n </th>\n </tr>\n </thead>\n <tr>\n <th>Email</th>\n <td>\n <input name='email' />\n </td>\n </tr>\n <tr>\n <th>Password</th>\n <td>\n <input name='password' type='password' />\n </td>\n </tr>\n <tr>\n <th></th>\n <td>\n <button title='Login to the backend to edit this page.' type='submit'>\n <span class='ui-icon ui-icon-unlocked'></span>\n Login\n </button>\n </td>\n </tr>\n </table>\n </form>\n <script type='text/javascript'>\n //<![CDATA[\n $(function() {\n $(\"button\")\n .addClass(\"ui-state-default ui-corner-all\")\n .hover(\n function() { $(this).addClass('ui-state-hover'); },\n function() { $(this).removeClass('ui-state-hover'); }\n );\n });\n //]]>\n </script>\n </body>\n</html>\n"}, @haml_buffer=nil>>>>]}
|
@@ -1,18 +0,0 @@
|
|
1
|
-
---
|
2
|
-
:@buttons:
|
3
|
-
- !ruby/object:Button
|
4
|
-
href: /Home
|
5
|
-
title: Home relabeled
|
6
|
-
description: Description of home page
|
7
|
-
- !ruby/object:Button
|
8
|
-
href: /News
|
9
|
-
title: News
|
10
|
-
description: Description of news page
|
11
|
-
- !ruby/object:Button
|
12
|
-
href: /Products
|
13
|
-
title: Products
|
14
|
-
description: Description of products page
|
15
|
-
- !ruby/object:Button
|
16
|
-
href: /About
|
17
|
-
title: About Us
|
18
|
-
description: Description of about page
|
@@ -1,18 +0,0 @@
|
|
1
|
-
---
|
2
|
-
buttons:
|
3
|
-
- !ruby/object:Button
|
4
|
-
href: /Home
|
5
|
-
title: Home relabeled
|
6
|
-
description: Description of home page
|
7
|
-
- !ruby/object:Button
|
8
|
-
href: /News
|
9
|
-
title: News
|
10
|
-
description: Description of news page
|
11
|
-
- !ruby/object:Button
|
12
|
-
href: /Products
|
13
|
-
title: Products
|
14
|
-
description: Description of products page
|
15
|
-
- !ruby/object:Button
|
16
|
-
href: /About
|
17
|
-
title: About Us
|
18
|
-
description: Description of about page
|
@@ -1,14 +0,0 @@
|
|
1
|
-
--- !ruby/object:Milk::Page
|
2
|
-
components:
|
3
|
-
- !ruby/object:Head {}
|
4
|
-
|
5
|
-
- !ruby/object:Body
|
6
|
-
markdown: |-
|
7
|
-
# Home more
|
8
|
-
|
9
|
-
Description of home page
|
10
|
-
- !ruby/object:Foot {}
|
11
|
-
|
12
|
-
title: Home
|
13
|
-
keywords: keywords, that, are, relevent, to, search, engines
|
14
|
-
description: This is a description of this site.
|
@@ -1,14 +0,0 @@
|
|
1
|
-
--- !ruby/object:Milk::Page
|
2
|
-
components:
|
3
|
-
- !ruby/object:Head {}
|
4
|
-
|
5
|
-
- !ruby/object:Body
|
6
|
-
markdown: |-
|
7
|
-
# Home more
|
8
|
-
|
9
|
-
Description of home page
|
10
|
-
- !ruby/object:Foot {}
|
11
|
-
|
12
|
-
title: Home
|
13
|
-
keywords: keywords, that, are, relevent, to, search, engines
|
14
|
-
description: This is a description of this site.
|
@@ -1,14 +0,0 @@
|
|
1
|
-
--- !ruby/object:Milk::Page
|
2
|
-
components:
|
3
|
-
- !ruby/object:Head {}
|
4
|
-
|
5
|
-
- !ruby/object:Body
|
6
|
-
markdown: |-
|
7
|
-
# Home more
|
8
|
-
|
9
|
-
Description of home page
|
10
|
-
- !ruby/object:Foot {}
|
11
|
-
|
12
|
-
title: Home
|
13
|
-
keywords: keywords, that, are, relevent, to, search, engines
|
14
|
-
description: This is a description of this site.
|
@@ -1,14 +0,0 @@
|
|
1
|
-
--- !ruby/object:Milk::Page
|
2
|
-
components:
|
3
|
-
- !ruby/object:Head {}
|
4
|
-
|
5
|
-
- !ruby/object:Body
|
6
|
-
markdown: |-
|
7
|
-
# Home more
|
8
|
-
|
9
|
-
Description of home page
|
10
|
-
- !ruby/object:Foot {}
|
11
|
-
|
12
|
-
title: Home
|
13
|
-
keywords: keywords, that, are, relevent, to, search, engines
|
14
|
-
description: This is a description of this site.
|
@@ -1,14 +0,0 @@
|
|
1
|
-
--- !ruby/object:Milk::Page
|
2
|
-
components:
|
3
|
-
- !ruby/object:Head {}
|
4
|
-
|
5
|
-
- !ruby/object:Body
|
6
|
-
markdown: |-
|
7
|
-
# Home more
|
8
|
-
|
9
|
-
Description of home page
|
10
|
-
- !ruby/object:Foot {}
|
11
|
-
|
12
|
-
title: Home
|
13
|
-
keywords: keywords, that, are, relevent, to, search, engines
|
14
|
-
description: This is a description of this site.
|