milk 0.0.6 → 0.0.7
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/Rakefile +4 -0
- data/lib/milk.rb +1 -0
- data/lib/milk/application.rb +52 -12
- data/lib/milk/component.rb +30 -16
- data/lib/milk/component.rb.~1~ +141 -0
- data/lib/milk/fields/login.haml +36 -25
- data/lib/milk/fields/markdown_field.haml +1 -1
- data/lib/milk/fields/xhtml.haml +19 -30
- data/lib/milk/page.rb +10 -6
- data/lib/milk/page.rb.~1~ +118 -0
- data/lib/milk/tasks.rb +9 -12
- data/milk.gemspec +1 -1
- data/site_template/config.ru +2 -1
- data/site_template/config/foot.yaml +3 -5
- data/site_template/config/foot.yaml.~1~ +2 -0
- data/site_template/config/foot.yaml.~2~ +2 -0
- data/site_template/config/foot.yaml.~3~ +1 -0
- data/site_template/config/foot.yaml.~4~ +3 -0
- data/site_template/config/foot.yaml.~5~ +3 -0
- data/site_template/config/head.yaml +1 -10
- data/site_template/config/head.yaml.~1~ +2 -0
- data/site_template/config/head.yaml.~2~ +2 -0
- data/site_template/config/head.yaml.~3~ +1 -0
- data/site_template/config/head.yaml.~4~ +18 -0
- data/site_template/config/head.yaml.~5~ +18 -0
- data/site_template/design/{reset.sass → 0-reset.sass} +0 -0
- data/site_template/design/{text.sass → 1-text.sass} +0 -0
- data/site_template/design/body.haml +1 -3
- data/site_template/design/button.haml +1 -1
- data/site_template/design/button.rb +1 -1
- data/site_template/design/foot.haml +1 -3
- data/site_template/design/foot.sass +0 -1
- data/site_template/design/head.haml +3 -6
- data/site_template/design/head.sass +24 -22
- data/site_template/design/page.haml +1 -2
- data/site_template/pages/About.yaml +5 -6
- data/site_template/pages/Home.yaml +5 -6
- data/site_template/pages/Home.yaml.~1~ +14 -0
- data/site_template/pages/Home.yaml.~2~ +14 -0
- data/site_template/pages/Home.yaml.~3~ +14 -0
- data/site_template/pages/Home.yaml.~4~ +14 -0
- data/site_template/pages/Home.yaml.~5~ +14 -0
- data/site_template/pages/News.yaml +5 -6
- data/site_template/pages/NotFound.yaml +5 -6
- data/site_template/pages/Products.yaml +5 -6
- data/site_template/public/js/jquery-1.3.2.min.js +19 -0
- data/site_template/public/js/jquery-ui-1.7.2.custom.min.js +34 -0
- data/site_template/public/js/jquery.json-1.3.min.js +37 -0
- data/site_template/public/skin/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/site_template/public/skin/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/site_template/public/skin/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/site_template/public/skin/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/site_template/public/skin/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/site_template/public/skin/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/site_template/public/skin/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/site_template/public/skin/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/site_template/public/skin/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/site_template/public/skin/images/ui-icons_222222_256x240.png +0 -0
- data/site_template/public/skin/images/ui-icons_228ef1_256x240.png +0 -0
- data/site_template/public/skin/images/ui-icons_ef8c08_256x240.png +0 -0
- data/site_template/public/skin/images/ui-icons_ffd27a_256x240.png +0 -0
- data/site_template/public/skin/images/ui-icons_ffffff_256x240.png +0 -0
- data/site_template/public/skin/jquery-ui-1.7.2.custom.css +406 -0
- data/site_template/public/style/style.css +63 -61
- metadata +42 -6
- data/lib/milk/fields/component_view.haml +0 -2
- data/milk-0.0.5.gem +0 -0
@@ -1 +1 @@
|
|
1
|
-
%textarea.markdown{:class=>"ui-widget ui-corner-all", :name => form_field}&= value
|
1
|
+
%textarea.markdown{:class=>"ui-widget ui-widget-content ui-corner-all", :name => form_field}&= value
|
data/lib/milk/fields/xhtml.haml
CHANGED
@@ -14,14 +14,6 @@
|
|
14
14
|
div.component
|
15
15
|
&:hover
|
16
16
|
:border 10px solid #08f
|
17
|
-
#framework-logo
|
18
|
-
:position absolute
|
19
|
-
:bottom 0
|
20
|
-
:right 20px
|
21
|
-
:opacity 0.3
|
22
|
-
:background transparent url(http://static.creationix.com/milk-logo.png)
|
23
|
-
:width 139px
|
24
|
-
:height 69px
|
25
17
|
#admin-title
|
26
18
|
:position absolute
|
27
19
|
:margin 0
|
@@ -38,6 +30,7 @@
|
|
38
30
|
:right 0
|
39
31
|
:padding 3px
|
40
32
|
.toolitem
|
33
|
+
:font-size 12px
|
41
34
|
:cursor pointer
|
42
35
|
:line-height 1em
|
43
36
|
:padding 2px 5px 2px 2px
|
@@ -51,18 +44,22 @@
|
|
51
44
|
:right 0px
|
52
45
|
:bottom 0px
|
53
46
|
#left
|
47
|
+
:font-size 11px
|
54
48
|
:position absolute
|
55
49
|
:top 0px
|
56
50
|
:left 0px
|
57
|
-
:width
|
51
|
+
:width 250px
|
58
52
|
:bottom 0px
|
53
|
+
h4
|
54
|
+
:font-size 14px
|
55
|
+
h3
|
56
|
+
:font-size 13px
|
59
57
|
#divider
|
60
58
|
:position absolute
|
61
59
|
:top 0px
|
62
|
-
:left
|
60
|
+
:left 250px
|
63
61
|
:width 5px
|
64
62
|
:bottom 0px
|
65
|
-
:background-color #555
|
66
63
|
|
67
64
|
#fields
|
68
65
|
:position absolute
|
@@ -82,10 +79,10 @@
|
|
82
79
|
:padding 2px
|
83
80
|
textarea
|
84
81
|
:width 100%
|
85
|
-
:min-height
|
82
|
+
:min-height 330px
|
86
83
|
.sprite-select
|
87
84
|
.sprite-option
|
88
|
-
:padding
|
85
|
+
:padding 4px
|
89
86
|
:margin 2px
|
90
87
|
:float left
|
91
88
|
:cursor pointer
|
@@ -93,7 +90,7 @@
|
|
93
90
|
#preview
|
94
91
|
:position absolute
|
95
92
|
:top 0px
|
96
|
-
:left
|
93
|
+
:left 255px
|
97
94
|
:right 0
|
98
95
|
:width auto
|
99
96
|
:bottom 0px
|
@@ -101,14 +98,15 @@
|
|
101
98
|
|
102
99
|
|
103
100
|
%link{ :rel => "shortcut icon", :href => "/favicon.ico", :type => "image/x-icon"}/
|
104
|
-
%link{ :href => "
|
101
|
+
%link{ :href => "/skin/jquery-ui-1.7.2.custom.css", :media => "screen", :rel => "stylesheet", :type => "text/css" }/
|
105
102
|
%link{ :href => "/style/style.css", :media => "screen", :rel => "stylesheet", :type => "text/css" }/
|
106
|
-
%script{:src=>"
|
107
|
-
%script{:src=>"
|
108
|
-
%script{:src=>"
|
103
|
+
%script{:src=>"/js/jquery-1.3.2.min.js", :type=>"text/javascript"}
|
104
|
+
%script{:src=>"/js/jquery.json-1.3.min.js", :type=>"text/javascript"}
|
105
|
+
%script{:src=>"/js/jquery-ui-1.7.2.custom.min.js", :type=>"text/javascript"}
|
109
106
|
%body
|
110
107
|
#frame
|
111
108
|
#left
|
109
|
+
.ui-widget-overlay
|
112
110
|
%form#fields{:method => "post", :action => "/"+@pagename}
|
113
111
|
%h3
|
114
112
|
%a{:href => "#"} Page Settings
|
@@ -135,8 +133,7 @@
|
|
135
133
|
Logout
|
136
134
|
#preview
|
137
135
|
= preview
|
138
|
-
#divider
|
139
|
-
#framework-logo
|
136
|
+
#divider.ui-widget-header
|
140
137
|
|
141
138
|
:javascript
|
142
139
|
function on_click_sprite(e)
|
@@ -245,20 +242,12 @@
|
|
245
242
|
});
|
246
243
|
|
247
244
|
$("#cancel_button").click(function(){
|
248
|
-
window.location = $("form")[0].action;
|
245
|
+
window.location = $("form")[0].action.replace('https://', 'http://');
|
249
246
|
});
|
250
247
|
$("#logout_button").click(function(){
|
251
|
-
window.location = "/logout?dest="+$("form")[0].action;
|
248
|
+
window.location = "/logout?dest="+$("form")[0].action.replace('https://', 'http://');
|
252
249
|
});
|
253
250
|
|
254
|
-
$(".component").click(function(evt){
|
255
|
-
evt.stopPropagation();
|
256
|
-
evt.preventDefault();
|
257
|
-
var index = this.className.split("_")[1];
|
258
|
-
sections.accordion('activate', parseInt(index)+1);
|
259
|
-
});
|
260
|
-
|
261
|
-
|
262
251
|
});
|
263
252
|
|
264
253
|
|
data/lib/milk/page.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
module Milk
|
2
2
|
class Page
|
3
3
|
|
4
|
+
attr_reader :components
|
4
5
|
attr_reader :title
|
5
6
|
attr_reader :description
|
6
7
|
attr_reader :pagename
|
8
|
+
attr_accessor :parent
|
9
|
+
@parent = nil
|
7
10
|
|
8
11
|
def self.find(pagename)
|
9
12
|
yaml_file = Milk::PAGES_DIR + "/" + pagename + ".yaml"
|
@@ -36,6 +39,10 @@ module Milk
|
|
36
39
|
[:@components, :@title, :@keywords, :@description]
|
37
40
|
end
|
38
41
|
|
42
|
+
def app
|
43
|
+
@parent
|
44
|
+
end
|
45
|
+
|
39
46
|
def save
|
40
47
|
save_settings
|
41
48
|
yaml_file = Milk::PAGES_DIR + "/" + @pagename + ".yaml"
|
@@ -77,13 +84,10 @@ module Milk
|
|
77
84
|
|
78
85
|
def preview
|
79
86
|
haml(Milk::COMPONENTS_DIR + "/page.haml", self) do
|
80
|
-
i = 0
|
81
87
|
(@components.collect do |component|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
end
|
86
|
-
end).join("\n")
|
88
|
+
print "component #{component}\n"
|
89
|
+
component.view
|
90
|
+
end).join("")
|
87
91
|
end
|
88
92
|
end
|
89
93
|
|
@@ -0,0 +1,118 @@
|
|
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
|
+
|
data/lib/milk/tasks.rb
CHANGED
@@ -6,7 +6,7 @@ task :environment do |t|
|
|
6
6
|
end
|
7
7
|
|
8
8
|
desc "Build the site from scratch if needed"
|
9
|
-
task :default => [:install, :
|
9
|
+
task :default => [:install, :sass]
|
10
10
|
|
11
11
|
desc "Create the skeleton structure, install the rackup file, and init the bzr repo"
|
12
12
|
task :install => :environment do
|
@@ -43,18 +43,15 @@ task :install => :environment do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
desc "Compile all the sass files in the component dir and merge into style.css"
|
46
|
-
task :
|
46
|
+
task :sass => :environment do
|
47
47
|
style_file = Milk::PUBLIC_DIR + "/style/style.css"
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
open(c, "r") do |file|
|
56
|
-
style.write Sass::Engine.new(file.read, :filename=>c, :style=>:compact, :load_paths => [Milk::COMPONENTS_DIR]).render.strip
|
57
|
-
end
|
48
|
+
puts "Updating #{style_file}..."
|
49
|
+
require 'haml'
|
50
|
+
open(style_file, "w") do |style|
|
51
|
+
Dir.glob(Milk::COMPONENTS_DIR + "/*.sass").sort.each do |c|
|
52
|
+
puts "Adding #{c}"
|
53
|
+
open(c, "r") do |file|
|
54
|
+
style.write Sass::Engine.new(file.read, :filename=>c, :style=>:compact, :load_paths => [Milk::COMPONENTS_DIR]).render.strip
|
58
55
|
end
|
59
56
|
end
|
60
57
|
end
|
data/milk.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
tastes great with and without cookies. The public facing aspect is static html
|
7
7
|
files, and the admin side is super easy to use."
|
8
8
|
s.requirements << 'none'
|
9
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.7"
|
10
10
|
s.author = "Tim Caswell"
|
11
11
|
s.email = "tim@creationix.com"
|
12
12
|
s.homepage = "http://milk.rubyforge.org"
|
data/site_template/config.ru
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
---
|
2
|
-
markdown:
|
3
|
-
|
4
|
-
|
5
|
-
[Milk]: http://milk.rubyforge.org/
|
1
|
+
---
|
2
|
+
markdown: "\xC2\xA9 2009 Your company name here. - Hosted on the [Milk] framework.\n\n\
|
3
|
+
[Milk]: http://milk.rubyforge.org/"
|
@@ -0,0 +1 @@
|
|
1
|
+
{:@markdown=>"© 2009 Your company name here. - Hosted on the [Milk] framework.\n\n[Milk]: http://milk.rubyforge.org/"}
|
@@ -1,27 +1,18 @@
|
|
1
|
-
---
|
1
|
+
---
|
2
2
|
buttons:
|
3
3
|
- !ruby/object:Button
|
4
4
|
href: /Home
|
5
|
-
icon: home
|
6
5
|
title: Home
|
7
6
|
description: Description of home page
|
8
|
-
parent: *id001
|
9
7
|
- !ruby/object:Button
|
10
8
|
href: /News
|
11
|
-
icon: news
|
12
9
|
title: News
|
13
10
|
description: Description of news page
|
14
|
-
parent: *id001
|
15
11
|
- !ruby/object:Button
|
16
12
|
href: /Products
|
17
|
-
icon: products
|
18
13
|
title: Products
|
19
14
|
description: Description of products page
|
20
|
-
parent: *id001
|
21
15
|
- !ruby/object:Button
|
22
16
|
href: /About
|
23
|
-
icon: about
|
24
17
|
title: About Us
|
25
18
|
description: Description of about page
|
26
|
-
parent: *id001
|
27
|
-
|
@@ -0,0 +1 @@
|
|
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>>>>]}
|
@@ -0,0 +1,18 @@
|
|
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
|
@@ -0,0 +1,18 @@
|
|
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
|