edit_mode 0.0.1

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 (94) hide show
  1. data/.gitignore +23 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +29 -0
  4. data/Guardfile +19 -0
  5. data/LICENSE +22 -0
  6. data/README.md +135 -0
  7. data/Rakefile +8 -0
  8. data/edit_mode.gemspec +31 -0
  9. data/lib/assets/javascripts/edit_mode/best_in_place.js.coffee +25 -0
  10. data/lib/assets/javascripts/edit_mode/best_in_place.js.coffee~ +26 -0
  11. data/lib/assets/javascripts/edit_mode/edit_mode_group.js.coffee +43 -0
  12. data/lib/assets/javascripts/edit_mode/initial_auto_hide.js.coffee +8 -0
  13. data/lib/assets/javascripts/edit_mode/make_modal.js.coffee +28 -0
  14. data/lib/assets/javascripts/edit_mode/show_only_in_edit_mode.js.coffee +22 -0
  15. data/lib/assets/javascripts/edit_mode/tool_buttons.js.coffee +21 -0
  16. data/lib/assets/javascripts/edit_mode.js +2 -0
  17. data/lib/assets/stylesheets/edit_mode/initial_auto_hide.css.sass +3 -0
  18. data/lib/assets/stylesheets/edit_mode/modal.css.sass +17 -0
  19. data/lib/assets/stylesheets/edit_mode.css +4 -0
  20. data/lib/assets/stylesheets/edit_mode.css~ +4 -0
  21. data/lib/edit_mode/engine.rb +7 -0
  22. data/lib/edit_mode/helper.rb +19 -0
  23. data/lib/edit_mode/railtie.rb +7 -0
  24. data/lib/edit_mode/version.rb +3 -0
  25. data/lib/edit_mode.rb +9 -0
  26. data/spec/helpers/edit_mode_helpers_spec.rb +26 -0
  27. data/spec/integration/buttons_spec.rb +69 -0
  28. data/spec/integration/show_only_in_edit_mode_spec.rb +24 -0
  29. data/spec/spec_helper.rb +22 -0
  30. data/test_app/.gitignore +15 -0
  31. data/test_app/Gemfile +56 -0
  32. data/test_app/README.md +135 -0
  33. data/test_app/Rakefile +7 -0
  34. data/test_app/app/assets/images/rails.png +0 -0
  35. data/test_app/app/assets/images/screenshot.png +0 -0
  36. data/test_app/app/assets/javascripts/activate_best_in_place.js +4 -0
  37. data/test_app/app/assets/javascripts/application.js +18 -0
  38. data/test_app/app/assets/stylesheets/#application.css# +14 -0
  39. data/test_app/app/assets/stylesheets/application.css +14 -0
  40. data/test_app/app/assets/stylesheets/modifications.css.sass +9 -0
  41. data/test_app/app/assets/stylesheets/nifty.css +79 -0
  42. data/test_app/app/controllers/application_controller.rb +3 -0
  43. data/test_app/app/controllers/root_controller.rb +11 -0
  44. data/test_app/app/controllers/users_controller.rb +44 -0
  45. data/test_app/app/helpers/application_helper.rb +2 -0
  46. data/test_app/app/helpers/error_messages_helper.rb +23 -0
  47. data/test_app/app/helpers/layout_helper.rb +22 -0
  48. data/test_app/app/helpers/users_helper.rb +2 -0
  49. data/test_app/app/mailers/.gitkeep +0 -0
  50. data/test_app/app/models/.gitkeep +0 -0
  51. data/test_app/app/models/user.rb +3 -0
  52. data/test_app/app/views/layouts/application.html.erb +19 -0
  53. data/test_app/app/views/users/_form.html.erb +16 -0
  54. data/test_app/app/views/users/edit.html.erb +8 -0
  55. data/test_app/app/views/users/index.html.erb +29 -0
  56. data/test_app/app/views/users/index.html.erb~ +21 -0
  57. data/test_app/app/views/users/new.html.erb +5 -0
  58. data/test_app/app/views/users/show.html.erb +54 -0
  59. data/test_app/app/views/users/show.html.erb~ +50 -0
  60. data/test_app/config/application.rb +59 -0
  61. data/test_app/config/boot.rb +6 -0
  62. data/test_app/config/database.yml +25 -0
  63. data/test_app/config/environment.rb +5 -0
  64. data/test_app/config/environments/development.rb +37 -0
  65. data/test_app/config/environments/production.rb +67 -0
  66. data/test_app/config/environments/test.rb +37 -0
  67. data/test_app/config/initializers/backtrace_silencers.rb +7 -0
  68. data/test_app/config/initializers/inflections.rb +15 -0
  69. data/test_app/config/initializers/mime_types.rb +5 -0
  70. data/test_app/config/initializers/secret_token.rb +7 -0
  71. data/test_app/config/initializers/session_store.rb +8 -0
  72. data/test_app/config/initializers/wrap_parameters.rb +14 -0
  73. data/test_app/config/locales/en.yml +5 -0
  74. data/test_app/config/routes.rb +62 -0
  75. data/test_app/config.ru +4 -0
  76. data/test_app/db/migrate/20120607231941_create_users.rb +14 -0
  77. data/test_app/db/schema.rb +24 -0
  78. data/test_app/db/seeds.rb +7 -0
  79. data/test_app/lib/assets/.gitkeep +0 -0
  80. data/test_app/lib/tasks/.gitkeep +0 -0
  81. data/test_app/public/404.html +26 -0
  82. data/test_app/public/422.html +26 -0
  83. data/test_app/public/500.html +25 -0
  84. data/test_app/public/favicon.ico +0 -0
  85. data/test_app/public/robots.txt +5 -0
  86. data/test_app/public/stylesheets/application.css +75 -0
  87. data/test_app/script/rails +6 -0
  88. data/test_app/test/fixtures/users.yml +9 -0
  89. data/test_app/test/functional/users_controller_test.rb +54 -0
  90. data/test_app/test/unit/user_test.rb +7 -0
  91. data/test_app/vendor/assets/javascripts/.gitkeep +0 -0
  92. data/test_app/vendor/assets/stylesheets/.gitkeep +0 -0
  93. data/test_app/vendor/plugins/.gitkeep +0 -0
  94. metadata +232 -0
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe "show only in edit mode span tags", js: true do
4
+
5
+ before do
6
+ visit user_path( User.first )
7
+ end
8
+
9
+ it "should not be visible when not in edit mode" do
10
+ page.should_not have_selector( ".show_only_in_edit_mode", visible: true )
11
+ end
12
+
13
+ it "should be visible in edit mode" do
14
+ click_on 'edit'
15
+ page.should have_selector( ".show_only_in_edit_mode", visible: true )
16
+ end
17
+
18
+ it "should be invisible after exiting the edit mode" do
19
+ click_on 'edit'
20
+ click_on 'cancel'
21
+ page.should_not have_selector( ".show_only_in_edit_mode", visible: true )
22
+ end
23
+
24
+ end
@@ -0,0 +1,22 @@
1
+
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path('../../test_app/config/environment', __FILE__)
5
+
6
+ require "rspec/rails"
7
+ require "nokogiri"
8
+
9
+ # Load support files
10
+ #Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each{|f| require f}
11
+
12
+ RSpec.configure do |config|
13
+
14
+ require 'rspec/expectations'
15
+
16
+ config.include RSpec::Matchers
17
+ # config.include EditMode::TestHelpers
18
+
19
+ config.mock_with :rspec
20
+ end
21
+
22
+ # Capybara.default_wait_time = 5
@@ -0,0 +1,15 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile ~/.gitignore_global
6
+
7
+ # Ignore bundler config
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+
13
+ # Ignore all logfiles and tempfiles.
14
+ /log/*.log
15
+ /tmp
data/test_app/Gemfile ADDED
@@ -0,0 +1,56 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '3.2.3'
4
+
5
+ # Bundle edge Rails instead:
6
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
+
8
+ group :development, :test do
9
+ gem 'sqlite3'
10
+ end
11
+ group :production do
12
+ gem 'pg'
13
+ end
14
+
15
+
16
+ # Gems used only for assets and not required
17
+ # in production environments by default.
18
+ group :assets do
19
+ gem 'sass-rails', '~> 3.2.3'
20
+ gem 'coffee-rails', '~> 3.2.1'
21
+
22
+ # See https://github.com/sstephenson/execjs#readme for more supported runtimes
23
+ gem 'therubyracer', :platform => :ruby
24
+
25
+ gem 'uglifier', '>= 1.0.3'
26
+ end
27
+
28
+ gem 'jquery-rails'
29
+ gem 'jquery-ui-rails'
30
+
31
+ group :development do
32
+ gem 'nifty-generators'
33
+ end
34
+
35
+ # To use ActiveModel has_secure_password
36
+ # gem 'bcrypt-ruby', '~> 3.0.0'
37
+
38
+ # To use Jbuilder templates for JSON
39
+ # gem 'jbuilder'
40
+
41
+ # Use unicorn as the app server
42
+ # gem 'unicorn'
43
+
44
+ # Deploy with Capistrano
45
+ # gem 'capistrano'
46
+
47
+ # To use debugger
48
+ # gem 'ruby-debug19', :require => 'ruby-debug'
49
+
50
+ gem "mocha", :group => :test
51
+
52
+ # Edit Mode (This is the gem to demonstrate here.)
53
+ gem 'edit_mode', git: 'git://github.com/fiedl/edit_mode.git'
54
+
55
+ # In-place editing (To show that this gem integrates best_in_place out of the box.)
56
+ gem 'best_in_place'
@@ -0,0 +1,135 @@
1
+ # EditMode
2
+
3
+ <img src="https://github.com/fiedl/edit_mode/raw/master/test_app/app/assets/images/screenshot.png" height="300" align="right" vspace="20" hspace="20" />
4
+
5
+ *edit_mode* is a *ruby on rails gem* that allows you to toggle an edit mode on a normal show view.
6
+ Think of it as a grouped in-place editing.
7
+ This also toggles [best_in_place](https://github.com/bernat/best_in_place) fields.
8
+
9
+ The edit mode is activated by pressing an 'edit' button on a show view. This shows additional editing tools
10
+ and switches on the best_in_place form fields. When editing is finished, use 'save' or 'cancel' buttons to
11
+ quit the edit mode and return to a normal show view.
12
+ Several editing groups per page are supported. Thus, you can have several 'boxes' to edit on a page.
13
+
14
+ ## Demo
15
+
16
+ You might want to have a look at [this demo app at heroku](http://edit-mode-test-app.herokuapp.com/).
17
+
18
+ The [code of this demo app can be found here](https://github.com/fiedl/edit_mode/tree/master/test_app).
19
+
20
+ ## Installation
21
+
22
+ THIS IS NOT READY, YET.
23
+
24
+ Add this line to your application's Gemfile:
25
+
26
+ gem 'edit_mode'
27
+
28
+ And then execute:
29
+
30
+ $ bundle
31
+
32
+ Or install it yourself as:
33
+
34
+ $ gem install edit_mode
35
+
36
+ TODO: Include css and js.
37
+
38
+ ### Include Assets
39
+
40
+ In `app/assets/javascripts/application.js`, add:
41
+
42
+ ```javascript
43
+ //= require edit_mode
44
+ ```
45
+
46
+ In `app/assets/stylesheets/application.css`, add:
47
+
48
+ ```css
49
+ /*
50
+ *...
51
+ *= require edit_mode
52
+ */
53
+ ```
54
+
55
+ ## Usage
56
+
57
+ ### Basic View
58
+
59
+ For a basic example, see: https://github.com/fiedl/edit_mode/blob/master/test_app/app/views/users/show.html.erb
60
+
61
+ ### edit_mode_group
62
+
63
+ The edit mode is toggled within a `<span class="edit_mode_group"></span>`. The buttons to 'edit', 'save' and 'cancel' should also be placed inside this span.
64
+
65
+ You can also have several edit_mode_group spans on a page, as shown in the demo app.
66
+
67
+ ### Tool Buttons
68
+
69
+ To enter and exit the edit mode, use buttons 'edit', 'save' and 'cancel'. These can be anchors, images, et cetera. They only have to have the correct css classes:
70
+
71
+ ```html
72
+ <span class="edit_mode_group">
73
+ <a class="edit_button" href="#">edit</a>
74
+ <a class="save_button" href="#">save</a>
75
+ <a class="cancel_button" href="#">cancel</a>
76
+ ...
77
+ </span>
78
+ ```
79
+
80
+ ### show_only_in_edit_mode
81
+
82
+ Within the edit_mode_group span, you may place certain elements that should only be shown when in edit mode. You can use this for 'add' buttons or 'destroy' buttons.
83
+
84
+ ```html
85
+ <span class="edit_mode_group">
86
+ ...
87
+ <span class="show_only_in_edit_mode">
88
+ <a href="#">add</a>
89
+ </span>
90
+ </span>
91
+ ```
92
+
93
+ The same, the other way round:
94
+
95
+ ```html
96
+ <span class="edit_mode_group">
97
+ ...
98
+ <span class="do_not_show_in_edit_mode">
99
+ <img src="..." alt="This picture is not shown in edit mode." />
100
+ </span>
101
+ </span>
102
+ ```
103
+
104
+ ### best_in_place
105
+
106
+ In the edit_mode_group span, all [best_in_place](https://github.com/bernat/best_in_place) elements are toggled as well.
107
+
108
+ ### '.editable' Triggers
109
+
110
+ If you need custom behaviour inside the edit_mode_group span, you can use these triggers: For all elements of the class `.editable`, the events `edit`, `save` and `cancel` are triggered, when entering or exiting edit mode.
111
+
112
+ ```html
113
+ <span class="edit_mode_group">
114
+ ...
115
+ <span class="editable custom_element">Test</span>
116
+ </span>
117
+ ```
118
+
119
+ Bind the event via JavaScript, e.g. with jQuery:
120
+
121
+ ```coffee
122
+ jQuery ->
123
+ $( ".custom_element" ).bind( "edit", ->
124
+ alert( "This element has just entered edit mode." )
125
+ )
126
+ ```
127
+
128
+ ## Contributing
129
+
130
+ 1. Fork it
131
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
132
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
133
+ 4. Push to the branch (`git push origin my-new-feature`)
134
+ 5. Create new Pull Request
135
+
data/test_app/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ TestApp::Application.load_tasks
@@ -0,0 +1,4 @@
1
+ $(document).ready(function() {
2
+ /* Activating Best In Place */
3
+ jQuery(".best_in_place").best_in_place();
4
+ });
@@ -0,0 +1,18 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery-ui
15
+ //= require jquery_ujs
16
+ //= require best_in_place
17
+ //= require edit_mode
18
+ //= require_tree .
@@ -0,0 +1,14 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
14
+
@@ -0,0 +1,14 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require edit_mode
12
+ *= require_self
13
+ *= require_tree .
14
+ */
@@ -0,0 +1,9 @@
1
+ .edit_mode_group
2
+ margin-top: 40px
3
+ background: white
4
+ padding: 10px
5
+ .edit_mode_tools
6
+ float: right
7
+
8
+ p.global_tools
9
+ margin-top: 70px
@@ -0,0 +1,79 @@
1
+ body {
2
+ background-color: #4B7399;
3
+ font-family: Verdana, Helvetica, Arial;
4
+ font-size: 14px;
5
+ }
6
+
7
+ a img {
8
+ border: none;
9
+ }
10
+
11
+ a {
12
+ color: #0000FF;
13
+ }
14
+
15
+ .clear {
16
+ clear: both;
17
+ height: 0;
18
+ overflow: hidden;
19
+ }
20
+
21
+ #container {
22
+ width: 75%;
23
+ margin: 0 auto;
24
+ background-color: #FFF;
25
+ padding: 20px 40px;
26
+ border: solid 1px black;
27
+ margin-top: 20px;
28
+ }
29
+
30
+ #flash_notice, #flash_error, #flash_alert {
31
+ padding: 5px 8px;
32
+ margin: 10px 0;
33
+ }
34
+
35
+ #flash_notice {
36
+ background-color: #CFC;
37
+ border: solid 1px #6C6;
38
+ }
39
+
40
+ #flash_error, #flash_alert {
41
+ background-color: #FCC;
42
+ border: solid 1px #C66;
43
+ }
44
+
45
+ .field_with_errors {
46
+ display: inline;
47
+ }
48
+
49
+ .error_messages {
50
+ width: 400px;
51
+ border: 2px solid #CF0000;
52
+ padding: 0px;
53
+ padding-bottom: 12px;
54
+ margin-bottom: 20px;
55
+ background-color: #f0f0f0;
56
+ font-size: 12px;
57
+ }
58
+
59
+ .error_messages h2 {
60
+ text-align: left;
61
+ font-weight: bold;
62
+ padding: 5px 10px;
63
+ font-size: 12px;
64
+ margin: 0;
65
+ background-color: #c00;
66
+ color: #fff;
67
+ }
68
+
69
+ .error_messages p {
70
+ margin: 8px 10px;
71
+ }
72
+
73
+ .error_messages ul {
74
+ margin-bottom: 0;
75
+ }
76
+
77
+ form .field, form .actions {
78
+ margin: 12px 0;
79
+ }
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ end
@@ -0,0 +1,11 @@
1
+ class RootController < ApplicationController
2
+
3
+ def index
4
+ if User.first
5
+ redirect_to User.first
6
+ else
7
+ redirect_to controller: 'users', action: 'index'
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,44 @@
1
+ class UsersController < ApplicationController
2
+ def index
3
+ @users = User.all
4
+ end
5
+
6
+ def show
7
+ @user = User.find(params[:id])
8
+ end
9
+
10
+ def new
11
+ @user = User.new
12
+ end
13
+
14
+ def create
15
+ @user = User.new(params[:user])
16
+ if @user.save
17
+ redirect_to @user, :notice => "Successfully created user."
18
+ else
19
+ render :action => 'new'
20
+ end
21
+ end
22
+
23
+ def edit
24
+ @user = User.find(params[:id])
25
+ end
26
+
27
+ def update
28
+ @user = User.find(params[:id])
29
+ if @user.update_attributes(params[:user])
30
+ respond_to do |format|
31
+ format.json { respond_with_bip( @user ) }
32
+ format.html { redirect_to @user, :notice => "Successfully updated user." }
33
+ end
34
+ else
35
+ render :action => 'edit'
36
+ end
37
+ end
38
+
39
+ def destroy
40
+ @user = User.find(params[:id])
41
+ @user.destroy
42
+ redirect_to users_url, :notice => "Successfully destroyed user."
43
+ end
44
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,23 @@
1
+ module ErrorMessagesHelper
2
+ # Render error messages for the given objects. The :message and :header_message options are allowed.
3
+ def error_messages_for(*objects)
4
+ options = objects.extract_options!
5
+ options[:header_message] ||= I18n.t(:"activerecord.errors.header", :default => "Invalid Fields")
6
+ options[:message] ||= I18n.t(:"activerecord.errors.message", :default => "Correct the following errors and try again.")
7
+ messages = objects.compact.map { |o| o.errors.full_messages }.flatten
8
+ unless messages.empty?
9
+ content_tag(:div, :class => "error_messages") do
10
+ list_items = messages.map { |msg| content_tag(:li, msg) }
11
+ content_tag(:h2, options[:header_message]) + content_tag(:p, options[:message]) + content_tag(:ul, list_items.join.html_safe)
12
+ end
13
+ end
14
+ end
15
+
16
+ module FormBuilderAdditions
17
+ def error_messages(options = {})
18
+ @template.error_messages_for(@object, options)
19
+ end
20
+ end
21
+ end
22
+
23
+ ActionView::Helpers::FormBuilder.send(:include, ErrorMessagesHelper::FormBuilderAdditions)
@@ -0,0 +1,22 @@
1
+ # These helper methods can be called in your template to set variables to be used in the layout
2
+ # This module should be included in all views globally,
3
+ # to do so you may need to add this line to your ApplicationController
4
+ # helper :layout
5
+ module LayoutHelper
6
+ def title(page_title, show_title = true)
7
+ content_for(:title) { h(page_title.to_s) }
8
+ @show_title = show_title
9
+ end
10
+
11
+ def show_title?
12
+ @show_title
13
+ end
14
+
15
+ def stylesheet(*args)
16
+ content_for(:head) { stylesheet_link_tag(*args) }
17
+ end
18
+
19
+ def javascript(*args)
20
+ content_for(:head) { javascript_include_tag(*args) }
21
+ end
22
+ end
@@ -0,0 +1,2 @@
1
+ module UsersHelper
2
+ end
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ attr_accessible :first_name, :last_name, :date_of_birth
3
+ end
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title>
5
+ <%= stylesheet_link_tag "application" %>
6
+ <%= javascript_include_tag :application %>
7
+ <%= csrf_meta_tag %>
8
+ <%= yield(:head) %>
9
+ </head>
10
+ <body>
11
+ <div id="container">
12
+ <% flash.each do |name, msg| %>
13
+ <%= content_tag :div, msg, :id => "flash_#{name}" %>
14
+ <% end %>
15
+ <%= content_tag :h1, yield(:title) if show_title? %>
16
+ <%= yield %>
17
+ </div>
18
+ </body>
19
+ </html>
@@ -0,0 +1,16 @@
1
+ <%= form_for @user do |f| %>
2
+ <%= f.error_messages %>
3
+ <p>
4
+ <%= f.label :first_name %><br />
5
+ <%= f.text_field :first_name %>
6
+ </p>
7
+ <p>
8
+ <%= f.label :last_name %><br />
9
+ <%= f.text_field :last_name %>
10
+ </p>
11
+ <p>
12
+ <%= f.label :date_of_birth %><br />
13
+ <%= f.date_select :date_of_birth %>
14
+ </p>
15
+ <p><%= f.submit %></p>
16
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <% title "Edit User" %>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <p>
6
+ <%= link_to "Show", @user %> |
7
+ <%= link_to "View All", users_path %>
8
+ </p>
@@ -0,0 +1,29 @@
1
+ <% title "Users" %>
2
+
3
+ <p>
4
+ This demo app shows how <a href="https://github.com/fiedl/edit_mode" target="_blank">edit_mode</a> looks like.
5
+ </p>
6
+ <p>
7
+ Just go to the 'show' page of a user and edit his profile there. (If no user exists, you will have to create one first.)
8
+ </p>
9
+
10
+
11
+ <table>
12
+ <tr>
13
+ <th>First Name</th>
14
+ <th>Last Name</th>
15
+ <th>Date Of Birth</th>
16
+ </tr>
17
+ <% for user in @users %>
18
+ <tr>
19
+ <td><%= user.first_name %></td>
20
+ <td><%= user.last_name %></td>
21
+ <td><%= user.date_of_birth %></td>
22
+ <td><%= link_to "Show", user %></td>
23
+ <td><%= link_to "Edit", edit_user_path(user) %></td>
24
+ <td><%= link_to "Destroy", user, :confirm => 'Are you sure?', :method => :delete %></td>
25
+ </tr>
26
+ <% end %>
27
+ </table>
28
+
29
+ <p><%= link_to "New User", new_user_path %></p>
@@ -0,0 +1,21 @@
1
+ <% title "Users" %>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>First Name</th>
6
+ <th>Last Name</th>
7
+ <th>Date Of Birth</th>
8
+ </tr>
9
+ <% for user in @users %>
10
+ <tr>
11
+ <td><%= user.first_name %></td>
12
+ <td><%= user.last_name %></td>
13
+ <td><%= user.date_of_birth %></td>
14
+ <td><%= link_to "Show", user %></td>
15
+ <td><%= link_to "Edit", edit_user_path(user) %></td>
16
+ <td><%= link_to "Destroy", user, :confirm => 'Are you sure?', :method => :delete %></td>
17
+ </tr>
18
+ <% end %>
19
+ </table>
20
+
21
+ <p><%= link_to "New User", new_user_path %></p>
@@ -0,0 +1,5 @@
1
+ <% title "New User" %>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <p><%= link_to "Back to List", users_path %></p>