typus 0.9.17

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 (154) hide show
  1. data/.gitignore +8 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +86 -0
  4. data/Rakefile +61 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/admin/master_controller.rb +354 -0
  7. data/app/controllers/typus_controller.rb +128 -0
  8. data/app/helpers/admin/form_helper.rb +386 -0
  9. data/app/helpers/admin/master_helper.rb +104 -0
  10. data/app/helpers/admin/public_helper.rb +27 -0
  11. data/app/helpers/admin/sidebar_helper.rb +236 -0
  12. data/app/helpers/admin/table_helper.rb +227 -0
  13. data/app/helpers/typus_helper.rb +194 -0
  14. data/app/models/typus_mailer.rb +14 -0
  15. data/app/models/typus_user.rb +5 -0
  16. data/app/views/admin/dashboard/_sidebar.html.erb +9 -0
  17. data/app/views/admin/resources/edit.html.erb +24 -0
  18. data/app/views/admin/resources/index.html.erb +23 -0
  19. data/app/views/admin/resources/new.html.erb +22 -0
  20. data/app/views/admin/resources/show.html.erb +18 -0
  21. data/app/views/admin/shared/_footer.html.erb +1 -0
  22. data/app/views/admin/shared/_pagination.html.erb +28 -0
  23. data/app/views/layouts/admin.html.erb +73 -0
  24. data/app/views/layouts/typus.html.erb +29 -0
  25. data/app/views/typus/dashboard.html.erb +9 -0
  26. data/app/views/typus/recover_password.html.erb +7 -0
  27. data/app/views/typus/reset_password.html.erb +15 -0
  28. data/app/views/typus/sign_in.html.erb +9 -0
  29. data/app/views/typus/sign_up.html.erb +7 -0
  30. data/app/views/typus_mailer/reset_password_link.erb +11 -0
  31. data/config/locales/typus/de.yml +109 -0
  32. data/config/locales/typus/es.yml +109 -0
  33. data/config/locales/typus/language.yml.template +113 -0
  34. data/config/locales/typus/pt-BR.yml +111 -0
  35. data/config/locales/typus/ru.yml +111 -0
  36. data/generators/typus/templates/config/initializers/typus.rb +33 -0
  37. data/generators/typus/templates/config/typus/README +51 -0
  38. data/generators/typus/templates/config/typus/application.yml +6 -0
  39. data/generators/typus/templates/config/typus/application_roles.yml +23 -0
  40. data/generators/typus/templates/config/typus/typus.yml +14 -0
  41. data/generators/typus/templates/config/typus/typus_roles.yml +2 -0
  42. data/generators/typus/templates/db/create_typus_users.rb +21 -0
  43. data/generators/typus/templates/public/images/admin/arrow_down.gif +0 -0
  44. data/generators/typus/templates/public/images/admin/arrow_up.gif +0 -0
  45. data/generators/typus/templates/public/images/admin/spinner.gif +0 -0
  46. data/generators/typus/templates/public/images/admin/status_false.gif +0 -0
  47. data/generators/typus/templates/public/images/admin/status_true.gif +0 -0
  48. data/generators/typus/templates/public/images/admin/trash.gif +0 -0
  49. data/generators/typus/templates/public/javascripts/admin/application.js +14 -0
  50. data/generators/typus/templates/public/stylesheets/admin/reset.css +68 -0
  51. data/generators/typus/templates/public/stylesheets/admin/screen.css +729 -0
  52. data/generators/typus/typus_generator.rb +122 -0
  53. data/generators/typus_update_schema_to_01/templates/config/typus.yml +14 -0
  54. data/generators/typus_update_schema_to_01/templates/migration.rb +11 -0
  55. data/generators/typus_update_schema_to_01/typus_update_schema_to_01_generator.rb +19 -0
  56. data/lib/typus.rb +122 -0
  57. data/lib/typus/active_record.rb +307 -0
  58. data/lib/typus/authentication.rb +142 -0
  59. data/lib/typus/configuration.rb +85 -0
  60. data/lib/typus/extensions/routes.rb +15 -0
  61. data/lib/typus/format.rb +55 -0
  62. data/lib/typus/generator.rb +81 -0
  63. data/lib/typus/hash.rb +8 -0
  64. data/lib/typus/locale.rb +17 -0
  65. data/lib/typus/object.rb +21 -0
  66. data/lib/typus/quick_edit.rb +40 -0
  67. data/lib/typus/reloader.rb +15 -0
  68. data/lib/typus/string.rb +11 -0
  69. data/lib/typus/templates/index.html.erb +11 -0
  70. data/lib/typus/templates/resource_controller.rb.erb +15 -0
  71. data/lib/typus/templates/resource_controller_test.rb.erb +10 -0
  72. data/lib/typus/templates/resources_controller.rb.erb +37 -0
  73. data/lib/typus/user.rb +134 -0
  74. data/lib/vendor/active_record.rb +15 -0
  75. data/lib/vendor/paginator.rb +143 -0
  76. data/rails/init.rb +3 -0
  77. data/tasks/typus_tasks.rake +32 -0
  78. data/test/config/broken/application.yml +68 -0
  79. data/test/config/broken/application_roles.yml +20 -0
  80. data/test/config/broken/empty.yml +0 -0
  81. data/test/config/broken/empty_roles.yml +0 -0
  82. data/test/config/broken/undefined.yml +3 -0
  83. data/test/config/broken/undefined_roles.yml +6 -0
  84. data/test/config/default/typus.yml +14 -0
  85. data/test/config/default/typus_roles.yml +2 -0
  86. data/test/config/empty/empty_01.yml +0 -0
  87. data/test/config/empty/empty_01_roles.yml +0 -0
  88. data/test/config/empty/empty_02.yml +0 -0
  89. data/test/config/empty/empty_02_roles.yml +0 -0
  90. data/test/config/locales/es.yml +10 -0
  91. data/test/config/ordered/001_roles.yml +2 -0
  92. data/test/config/ordered/002_roles.yml +2 -0
  93. data/test/config/unordered/app_one_roles.yml +2 -0
  94. data/test/config/unordered/app_two_roles.yml +2 -0
  95. data/test/config/working/application.yml +68 -0
  96. data/test/config/working/application_roles.yml +22 -0
  97. data/test/config/working/typus.yml +14 -0
  98. data/test/config/working/typus_roles.yml +2 -0
  99. data/test/fixtures/app/controllers/admin/assets_controller.rb +2 -0
  100. data/test/fixtures/app/controllers/admin/categories_controller.rb +2 -0
  101. data/test/fixtures/app/controllers/admin/comments_controller.rb +2 -0
  102. data/test/fixtures/app/controllers/admin/pages_controller.rb +2 -0
  103. data/test/fixtures/app/controllers/admin/posts_controller.rb +2 -0
  104. data/test/fixtures/app/controllers/admin/status_controller.rb +6 -0
  105. data/test/fixtures/app/controllers/admin/typus_users_controller.rb +2 -0
  106. data/test/fixtures/app/controllers/admin/watch_dog_controller.rb +6 -0
  107. data/test/fixtures/app/views/admin/comments/_edit.html.erb +1 -0
  108. data/test/fixtures/app/views/admin/comments/_index.html.erb +1 -0
  109. data/test/fixtures/app/views/admin/comments/_new.html.erb +1 -0
  110. data/test/fixtures/app/views/admin/comments/_show.html.erb +1 -0
  111. data/test/fixtures/app/views/admin/comments/_sidebar.html.erb +1 -0
  112. data/test/fixtures/app/views/admin/dashboard/_content.html.erb +1 -0
  113. data/test/fixtures/app/views/admin/dashboard/_sidebar.html.erb +1 -0
  114. data/test/fixtures/app/views/admin/resources/_sidebar.html.erb +1 -0
  115. data/test/fixtures/app/views/admin/shared/_footer.html.erb +1 -0
  116. data/test/fixtures/app/views/admin/status/index.html.erb +1 -0
  117. data/test/fixtures/app/views/admin/templates/_datepicker.html.erb +1 -0
  118. data/test/fixtures/assets.yml +11 -0
  119. data/test/fixtures/categories.yml +14 -0
  120. data/test/fixtures/comments.yml +27 -0
  121. data/test/fixtures/pages.yml +41 -0
  122. data/test/fixtures/posts.yml +37 -0
  123. data/test/fixtures/typus_users.yml +54 -0
  124. data/test/functional/admin/assets_controller_test.rb +57 -0
  125. data/test/functional/admin/categories_controller_test.rb +106 -0
  126. data/test/functional/admin/comments_controller_test.rb +120 -0
  127. data/test/functional/admin/master_controller_test.rb +5 -0
  128. data/test/functional/admin/posts_controller_test.rb +261 -0
  129. data/test/functional/admin/status_controller_test.rb +43 -0
  130. data/test/functional/admin/typus_users_controller_test.rb +239 -0
  131. data/test/functional/typus_controller_test.rb +321 -0
  132. data/test/helper.rb +51 -0
  133. data/test/helpers/admin/form_helper_test.rb +337 -0
  134. data/test/helpers/admin/master_helper_test.rb +69 -0
  135. data/test/helpers/admin/public_helper_test.rb +26 -0
  136. data/test/helpers/admin/sidebar_helper_test.rb +335 -0
  137. data/test/helpers/admin/table_helper_test.rb +239 -0
  138. data/test/helpers/typus_helper_test.rb +117 -0
  139. data/test/lib/active_record_test.rb +382 -0
  140. data/test/lib/configuration_test.rb +94 -0
  141. data/test/lib/hash_test.rb +11 -0
  142. data/test/lib/routes_test.rb +71 -0
  143. data/test/lib/string_test.rb +25 -0
  144. data/test/lib/typus_test.rb +85 -0
  145. data/test/models.rb +51 -0
  146. data/test/schema.rb +64 -0
  147. data/test/unit/typus_mailer_test.rb +33 -0
  148. data/test/unit/typus_test.rb +17 -0
  149. data/test/unit/typus_user_roles_test.rb +90 -0
  150. data/test/unit/typus_user_test.rb +177 -0
  151. data/test/vendor/active_record_test.rb +18 -0
  152. data/test/vendor/paginator_test.rb +136 -0
  153. data/typus.gemspec +228 -0
  154. metadata +241 -0
@@ -0,0 +1,194 @@
1
+ module TypusHelper
2
+
3
+ ##
4
+ # Applications list on the dashboard
5
+ #
6
+ def applications
7
+
8
+ returning(String.new) do |html|
9
+
10
+ Typus.applications.each do |app|
11
+
12
+ available = Typus.application(app).map do |resource|
13
+ resource if @current_user.resources.include?(resource)
14
+ end
15
+ next if available.compact.empty?
16
+
17
+ html << <<-HTML
18
+ <table class="typus">
19
+ <tr>
20
+ <th colspan="2">#{app}</th>
21
+ </tr>
22
+ HTML
23
+
24
+ available.compact.each do |model|
25
+
26
+ klass = model.constantize
27
+ klass_resource = klass.name.tableize
28
+
29
+ admin_items_path = { :controller => "admin/#{klass_resource}" }
30
+ new_admin_item_path = { :controller => "admin/#{klass_resource}", :action => 'new'}
31
+
32
+ html << <<-HTML
33
+ <tr class="#{cycle('even', 'odd')}">
34
+ <td>#{link_to klass.typus_human_name.pluralize, admin_items_path}<br /><small>#{klass.typus_description}</small></td>
35
+ <td class="right"><small>
36
+ #{link_to _("Add"), new_admin_item_path if @current_user.can_perform?(klass, 'create')}
37
+ </small></td>
38
+ </tr>
39
+ HTML
40
+
41
+ end
42
+
43
+ html << <<-HTML
44
+ </table>
45
+ HTML
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ ##
54
+ # Resources (wich are not models) on the dashboard.
55
+ #
56
+ def resources
57
+
58
+ available = Typus.resources.map do |resource|
59
+ resource if @current_user.resources.include?(resource)
60
+ end
61
+ return if available.compact.empty?
62
+
63
+ returning(String.new) do |html|
64
+
65
+ html << <<-HTML
66
+ <table class="typus">
67
+ <tr>
68
+ <th colspan="2">#{_("Resources")}</th>
69
+ </tr>
70
+ HTML
71
+
72
+ available.compact.each do |resource|
73
+
74
+ resource_path = { :controller => "admin/#{resource.underscore}" }
75
+
76
+ html << <<-HTML
77
+ <tr class="#{cycle('even', 'odd')}">
78
+ <td>#{link_to _(resource.humanize), resource_path}</td>
79
+ <td align="right" style="vertical-align: bottom;"></td>
80
+ </tr>
81
+ HTML
82
+
83
+ end
84
+
85
+ html << <<-HTML
86
+ </table>
87
+ HTML
88
+
89
+ end
90
+
91
+ end
92
+
93
+ def typus_block(*args)
94
+
95
+ options = args.extract_options!
96
+
97
+ partials_path = "admin/#{options[:location]}"
98
+ resources_partials_path = 'admin/resources'
99
+
100
+ partials = ActionController::Base.view_paths.map do |view_path|
101
+ Dir["#{view_path.path}/#{partials_path}/*"].map { |f| File.basename(f, '.html.erb') }
102
+ end.flatten
103
+ resources_partials = Dir["#{Rails.root}/app/views/#{resources_partials_path}/*"].map { |f| File.basename(f, '.html.erb') }
104
+
105
+ partial = "_#{options[:partial]}"
106
+
107
+ path = if partials.include?(partial) then partials_path
108
+ elsif resources_partials.include?(partial) then resources_partials_path
109
+ end
110
+
111
+ render :partial => "#{path}/#{options[:partial]}" if path
112
+
113
+ end
114
+
115
+ def page_title(action = params[:action])
116
+ crumbs = [ ]
117
+ crumbs << @resource[:class].typus_human_name.pluralize if @resource
118
+ crumbs << _(action.humanize) unless %w( index ).include?(action)
119
+ return "#{Typus::Configuration.options[:app_name]} - " + crumbs.compact.map { |x| x }.join(' &rsaquo; ')
120
+ end
121
+
122
+ def header
123
+
124
+ links = []
125
+ links << "<li>#{link_to_unless_current _("Dashboard"), admin_dashboard_path}</li>"
126
+
127
+ Typus.models_on_header.each do |model|
128
+ links << "<li>#{link_to_unless_current model.constantize.typus_human_name.pluralize, :controller => "/admin/#{model.tableize}"}</li>"
129
+ end
130
+
131
+ if ActionController::Routing::Routes.named_routes.routes.keys.include?(:root)
132
+ links << "<li>#{link_to _("View site"), root_path, :target => 'blank'}</li>"
133
+ end
134
+
135
+ <<-HTML
136
+ <h1>#{Typus::Configuration.options[:app_name]}</h1>
137
+ <ul>
138
+ #{links.join("\n")}
139
+ </ul>
140
+ HTML
141
+
142
+ end
143
+
144
+ def login_info(user = @current_user)
145
+
146
+ admin_edit_typus_user_path = { :controller => "admin/#{Typus::Configuration.options[:user_class_name].tableize}",
147
+ :action => 'edit',
148
+ :id => user.id }
149
+
150
+ message = _("Are you sure you want to sign out and end your session?")
151
+
152
+ <<-HTML
153
+ <ul>
154
+ <li>#{_("Logged as")} #{link_to user.name, admin_edit_typus_user_path, :title => "#{user.email} (#{user.role})"}</li>
155
+ <li>#{link_to _("Sign out"), admin_sign_out_path, { :confirm => message } }</li>
156
+ </ul>
157
+ HTML
158
+
159
+ end
160
+
161
+ def display_flash_message(message = flash)
162
+
163
+ return if message.empty?
164
+ flash_type = message.keys.first
165
+
166
+ <<-HTML
167
+ <div id="flash" class="#{flash_type}">
168
+ <p>#{message[flash_type]}</p>
169
+ </div>
170
+ HTML
171
+
172
+ end
173
+
174
+ def typus_message(message, html_class = 'notice')
175
+ <<-HTML
176
+ <div id="flash" class="#{html_class}">
177
+ <p>#{message}</p>
178
+ </div>
179
+ HTML
180
+ end
181
+
182
+ def locales(uri = admin_set_locale_path)
183
+
184
+ return unless Typus.locales.many?
185
+
186
+ locale_links = Typus.locales.map { |l| "<a href=\"#{uri}?locale=#{l.last}\">#{l.first.downcase}</a>" }
187
+
188
+ <<-HTML
189
+ <p>#{_("Set language to")} #{locale_links.join(', ')}.</p>
190
+ HTML
191
+
192
+ end
193
+
194
+ end
@@ -0,0 +1,14 @@
1
+ class TypusMailer < ActionMailer::Base
2
+
3
+ self.template_root = "#{File.dirname(__FILE__)}/../views"
4
+
5
+ def reset_password_link(user)
6
+ @subject = "[#{Typus::Configuration.options[:app_name]}] #{_("Reset password")}"
7
+ @body = { :user => user }
8
+ @recipients = user.email
9
+ @from = Typus::Configuration.options[:email]
10
+ @sent_on = Time.now
11
+ @headers = {}
12
+ end
13
+
14
+ end
@@ -0,0 +1,5 @@
1
+ class TypusUser < ActiveRecord::Base
2
+
3
+ enable_as_typus_user
4
+
5
+ end
@@ -0,0 +1,9 @@
1
+ <h2>Welcome to Typus!</h2>
2
+
3
+ <p>Documentation is available <%= link_to 'here', 'http://intraducibles.com/projects/typus', :rel => 'external' %>.</p>
4
+
5
+ <p>If you need help don't hesitate in joining the <%= link_to 'Typus', 'http://groups.google.com/group/typus', :rel => 'external' %> mailing list.</p>
6
+
7
+ <p>Remember you can replace this sidebar adding <code>_sidebar.html.erb</code> file on <code>app/views/admin/dashboard</code> folder.</p>
8
+
9
+ <p>Have a nice day!</p>
@@ -0,0 +1,24 @@
1
+ <% content_for :sidebar do %>
2
+ <%= typus_block :location => @resource[:self], :partial => 'sidebar' %>
3
+ <%= actions %>
4
+ <% end %>
5
+
6
+ <%= display_link_to_previous if params[:back_to] %>
7
+
8
+ <h2><%= link_to @resource[:class].typus_human_name.pluralize, :action => 'index' %> &rsaquo;
9
+ <%= _("Edit") %></h2>
10
+
11
+ <%= typus_block :location => @resource[:self], :partial => 'edit' %>
12
+
13
+ <% form_for @item,
14
+ :url => { :action => 'update',
15
+ :id => @item.id ,
16
+ :back_to => params[:back_to],
17
+ :resource => params[:resource],
18
+ :resource_id => params[:resource_id]},
19
+ :html => { :multipart => true } do |f| %>
20
+ <%= build_form(@fields) %>
21
+ <p><%= submit_tag _("Update entry"), :class => 'button' %></p>
22
+ <% end %>
23
+
24
+ <%= typus_relationships %>
@@ -0,0 +1,23 @@
1
+ <% content_for :sidebar do %>
2
+ <%= typus_block :location => @resource[:self], :partial => 'sidebar' %>
3
+ <%= actions %>
4
+ <%= search %>
5
+ <%= filters %>
6
+ <% end %>
7
+
8
+ <h2><%= @resource[:class].typus_human_name.pluralize %> <%= remove_filter_link %></h2>
9
+
10
+ <%= typus_block :location => @resource[:self], :partial => 'index' %>
11
+
12
+ <% unless @items.count.zero? -%>
13
+ <%= build_list(@resource[:class], @fields, @items) %>
14
+ <%= pagination %>
15
+ <% else %>
16
+ <div id="flash" class="notice">
17
+ <% if @resource[:class].count.zero? %>
18
+ <p><%= _("There are no {{records}}.", :records => @resource[:class].typus_human_name.pluralize.downcase) %></p>
19
+ <% else %>
20
+ <p><%= _("There are no {{records}} under this filter.", :records => @resource[:class].typus_human_name.pluralize.downcase) %></p>
21
+ <% end %>
22
+ </div>
23
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <% content_for :sidebar do %>
2
+ <%= typus_block :location => @resource[:self], :partial => 'sidebar' %>
3
+ <%= actions %>
4
+ <% end %>
5
+
6
+ <%= display_link_to_previous if params[:back_to] %>
7
+
8
+ <h2><%= link_to @resource[:class].typus_human_name.pluralize, :action => 'index' %> &rsaquo;
9
+ <%= _("New") %></h2>
10
+
11
+ <%= typus_block :location => @resource[:self], :partial => 'new' %>
12
+
13
+ <% form_for @item,
14
+ :url => { :action => 'create',
15
+ :back_to => params[:back_to],
16
+ :selected => params[:selected],
17
+ :resource => params[:resource],
18
+ :resource_id => params[:resource_id] },
19
+ :html => { :multipart => true } do |f| %>
20
+ <%= build_form(@fields) %>
21
+ <p><%= submit_tag _("Create entry"), :class => 'button' %></p>
22
+ <% end %>
@@ -0,0 +1,18 @@
1
+ <% content_for :sidebar do %>
2
+ <%= typus_block :location => @resource[:self], :partial => 'sidebar' %>
3
+ <%= actions %>
4
+ <% end %>
5
+
6
+ <h2><%= link_to @resource[:class].typus_human_name.pluralize, :action => 'index' %> &rsaquo;
7
+ <%= _("Show") %></h2>
8
+
9
+ <%= typus_block :location => @resource[:self], :partial => 'show' %>
10
+
11
+ <dl>
12
+ <%- @fields.map { |u| u.first }.each do |column| -%>
13
+ <dt><%=h @resource[:class].human_attribute_name(column) %></dt>
14
+ <dd><%=h (!@item.send(column).blank?) ? @item.send(column) : 'nil' %></dd>
15
+ <%- end -%>
16
+ </dl>
17
+
18
+ <%= typus_relationships %>
@@ -0,0 +1 @@
1
+ <p><%= link_to 'Typus', 'http://intraducibles.com/projects/typus', :rel => 'external' %> is the effortless backend interface for <%= link_to 'Ruby on Rails', 'http://rubyonrails.org/', :rel => 'external' %> applications.</p>
@@ -0,0 +1,28 @@
1
+ <div class="pagination">
2
+
3
+ <% if @items.prev? %>
4
+ <%= link_to _("&larr; Previous"), params.merge(:page => @items.prev.number, :anchor => @options[:anchor]) %>
5
+ <% else %>
6
+ <span class="disabled"><%= _("&larr; Previous") %></span>
7
+ <% end %>
8
+
9
+ <% last_page = 0 -%>
10
+
11
+ <% build_pagination(@pager) do |n| -%>
12
+ <% if @items.number == n -%>
13
+ <span class="current"><%= n %></span>
14
+ <% else -%>
15
+ <%= "..." if last_page + 1 < n %>
16
+ <%= link_to n, params.merge(:page => n, :anchor => @options[:anchor]) %>
17
+ <% end -%>
18
+ <% last_page = n -%>
19
+
20
+ <% end -%>
21
+
22
+ <% if @items.next? %>
23
+ <%= link_to _("Next &rarr;"), params.merge(:page => @items.next.number, :anchor => @options[:anchor]) %>
24
+ <% else %>
25
+ <span class="disabled"><%= _("Next &rarr;") %></span>
26
+ <% end %>
27
+
28
+ </div>
@@ -0,0 +1,73 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+
6
+ <head>
7
+
8
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9
+
10
+ <title><%= page_title %></title>
11
+
12
+ <%= stylesheet_link_tag 'admin/reset', :media => 'screen' %>
13
+ <%= stylesheet_link_tag 'admin/screen', :media => 'screen' %>
14
+ <%= yield :stylesheets -%>
15
+
16
+ <%= javascript_include_tag 'admin/application' %>
17
+ <%= include_tiny_mce_if_needed if defined?(TinyMCE) %>
18
+ <%= yield :javascripts -%>
19
+
20
+ </head>
21
+
22
+ <body>
23
+
24
+ <div id="header_wrapper">
25
+
26
+ <div id="header">
27
+ <div class="left">
28
+ <%= header %>
29
+ </div>
30
+ <div class="right">
31
+ <%= login_info %>
32
+ </div>
33
+ <div class="clear"></div>
34
+ </div>
35
+
36
+ </div>
37
+
38
+ <div id="wrapper">
39
+
40
+ <div id="content_wrapper">
41
+
42
+ <div id="content">
43
+ <%= display_flash_message %>
44
+ <%= yield %>
45
+ </div>
46
+
47
+ <div id="sidebar">
48
+ <%= yield :sidebar %>
49
+ </div>
50
+
51
+ <div class="clear"></div>
52
+
53
+ </div>
54
+
55
+ </div>
56
+
57
+ <div id="footer_wrapper">
58
+
59
+ <div id="footer">
60
+ <div class="left">
61
+ <%= typus_block :location => 'shared', :partial => 'footer' %>
62
+ </div>
63
+ <div class="right">
64
+ <%= locales %>
65
+ </div>
66
+ <div class="clear"></div>
67
+ </div>
68
+
69
+ </div>
70
+
71
+ </body>
72
+
73
+ </html>
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+
6
+ <head>
7
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
8
+ <meta name="apple-mobile-web-app-capable" content="yes" />
9
+ <meta name="viewport" content="width=500, initial-scale=0.60, minimum-scale=0.60" />
10
+ <title><%= page_title %></title>
11
+ <%= stylesheet_link_tag 'admin/reset', :media => 'screen' %>
12
+ <%= stylesheet_link_tag 'admin/screen', :media => 'screen' %>
13
+ </head>
14
+
15
+ <body>
16
+
17
+ <div id="dialog">
18
+ <h1><%= link_to Typus::Configuration.options[:app_name], admin_sign_in_path %></h1>
19
+ <%= display_flash_message %>
20
+ <%= yield %>
21
+ </div>
22
+
23
+ <div id="bottom_dialog">
24
+ <%= typus_block :location => 'shared', :partial => 'footer' %>
25
+ </div>
26
+
27
+ </body>
28
+
29
+ </html>