milk 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|