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.
Files changed (67) hide show
  1. data/Rakefile +4 -0
  2. data/lib/milk.rb +1 -0
  3. data/lib/milk/application.rb +52 -12
  4. data/lib/milk/component.rb +30 -16
  5. data/lib/milk/component.rb.~1~ +141 -0
  6. data/lib/milk/fields/login.haml +36 -25
  7. data/lib/milk/fields/markdown_field.haml +1 -1
  8. data/lib/milk/fields/xhtml.haml +19 -30
  9. data/lib/milk/page.rb +10 -6
  10. data/lib/milk/page.rb.~1~ +118 -0
  11. data/lib/milk/tasks.rb +9 -12
  12. data/milk.gemspec +1 -1
  13. data/site_template/config.ru +2 -1
  14. data/site_template/config/foot.yaml +3 -5
  15. data/site_template/config/foot.yaml.~1~ +2 -0
  16. data/site_template/config/foot.yaml.~2~ +2 -0
  17. data/site_template/config/foot.yaml.~3~ +1 -0
  18. data/site_template/config/foot.yaml.~4~ +3 -0
  19. data/site_template/config/foot.yaml.~5~ +3 -0
  20. data/site_template/config/head.yaml +1 -10
  21. data/site_template/config/head.yaml.~1~ +2 -0
  22. data/site_template/config/head.yaml.~2~ +2 -0
  23. data/site_template/config/head.yaml.~3~ +1 -0
  24. data/site_template/config/head.yaml.~4~ +18 -0
  25. data/site_template/config/head.yaml.~5~ +18 -0
  26. data/site_template/design/{reset.sass → 0-reset.sass} +0 -0
  27. data/site_template/design/{text.sass → 1-text.sass} +0 -0
  28. data/site_template/design/body.haml +1 -3
  29. data/site_template/design/button.haml +1 -1
  30. data/site_template/design/button.rb +1 -1
  31. data/site_template/design/foot.haml +1 -3
  32. data/site_template/design/foot.sass +0 -1
  33. data/site_template/design/head.haml +3 -6
  34. data/site_template/design/head.sass +24 -22
  35. data/site_template/design/page.haml +1 -2
  36. data/site_template/pages/About.yaml +5 -6
  37. data/site_template/pages/Home.yaml +5 -6
  38. data/site_template/pages/Home.yaml.~1~ +14 -0
  39. data/site_template/pages/Home.yaml.~2~ +14 -0
  40. data/site_template/pages/Home.yaml.~3~ +14 -0
  41. data/site_template/pages/Home.yaml.~4~ +14 -0
  42. data/site_template/pages/Home.yaml.~5~ +14 -0
  43. data/site_template/pages/News.yaml +5 -6
  44. data/site_template/pages/NotFound.yaml +5 -6
  45. data/site_template/pages/Products.yaml +5 -6
  46. data/site_template/public/js/jquery-1.3.2.min.js +19 -0
  47. data/site_template/public/js/jquery-ui-1.7.2.custom.min.js +34 -0
  48. data/site_template/public/js/jquery.json-1.3.min.js +37 -0
  49. data/site_template/public/skin/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  50. data/site_template/public/skin/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  51. data/site_template/public/skin/images/ui-bg_flat_10_000000_40x100.png +0 -0
  52. data/site_template/public/skin/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  53. data/site_template/public/skin/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  54. data/site_template/public/skin/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  55. data/site_template/public/skin/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  56. data/site_template/public/skin/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  57. data/site_template/public/skin/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  58. data/site_template/public/skin/images/ui-icons_222222_256x240.png +0 -0
  59. data/site_template/public/skin/images/ui-icons_228ef1_256x240.png +0 -0
  60. data/site_template/public/skin/images/ui-icons_ef8c08_256x240.png +0 -0
  61. data/site_template/public/skin/images/ui-icons_ffd27a_256x240.png +0 -0
  62. data/site_template/public/skin/images/ui-icons_ffffff_256x240.png +0 -0
  63. data/site_template/public/skin/jquery-ui-1.7.2.custom.css +406 -0
  64. data/site_template/public/style/style.css +63 -61
  65. metadata +42 -6
  66. data/lib/milk/fields/component_view.haml +0 -2
  67. 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
@@ -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 400px
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 400px
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 380px
82
+ :min-height 330px
86
83
  .sprite-select
87
84
  .sprite-option
88
- :padding 5px
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 405px
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 => "http://static.creationix.com/skins/ui-lightness/jquery-ui-1.7.1.custom.css", :media => "screen", :rel => "stylesheet", :type => "text/css" }/
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=>"http://static.creationix.com/scripts/jquery-1.3.2.min.js", :type=>"text/javascript"}
107
- %script{:src=>"http://static.creationix.com/scripts/jquery.json-1.3.min.js", :type=>"text/javascript"}
108
- %script{:src=>"http://static.creationix.com/scripts/jquery-ui-1.7.1.custom.min.js", :type=>"text/javascript"}
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
 
@@ -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
- haml(FIELDS_DIR + "/component_view.haml", component, {:index=>i}) do
83
- i += 1
84
- component.view
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
+
@@ -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, :compile_sass]
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 :compile_sass => :environment do
46
+ task :sass => :environment do
47
47
  style_file = Milk::PUBLIC_DIR + "/style/style.css"
48
- style_mtime = (File.file? style_file) && (File.mtime style_file)
49
- if (!File.file? style_file) || Dir.glob(Milk::COMPONENTS_DIR + "/*.sass").any? { |sass| (File.mtime sass) > style_mtime }
50
- puts "Updating #{style_file}..."
51
- require 'haml'
52
- open(style_file, "w") do |style|
53
- Dir.glob(Milk::COMPONENTS_DIR + "/*.sass").each do |c|
54
- puts "Adding #{c}"
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
@@ -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.6"
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"
@@ -10,6 +10,7 @@ if %w{rackup thin}.member?($0.rpartition('/').last)
10
10
  Milk::Application.new
11
11
  ])
12
12
  else
13
- run Milk::Application.new
13
+ # When using passenger, require secure cookies and don't bother with static files
14
+ run Milk::Application.new(true)
14
15
  end
15
16
 
@@ -1,5 +1,3 @@
1
- --- !ruby/object:Foot
2
- markdown: |-
3
- © 2009 Your company name here. - Hosted on the [Milk] framework.
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,2 @@
1
+ --- !ruby/object:Foot {}
2
+
@@ -0,0 +1,2 @@
1
+ --- !ruby/object:Foot {}
2
+
@@ -0,0 +1 @@
1
+ {:@markdown=>"© 2009 Your company name here. - Hosted on the [Milk] framework.\n\n[Milk]: http://milk.rubyforge.org/"}
@@ -0,0 +1,3 @@
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,3 @@
1
+ ---
2
+ markdown: "\xC2\xA9 2009 Your company name here. - Hosted on the [Milk] framework.\n\n\
3
+ [Milk]: http://milk.rubyforge.org/"
@@ -1,27 +1,18 @@
1
- --- &id001 !ruby/object:Head
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,2 @@
1
+ --- !ruby/object:Head {}
2
+
@@ -0,0 +1,2 @@
1
+ --- !ruby/object:Head {}
2
+
@@ -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