r4 0.1.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 (49) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/README.md +64 -0
  4. data/Rakefile +2 -0
  5. data/bin/console +14 -0
  6. data/bin/r4 +4 -0
  7. data/bin/setup +7 -0
  8. data/lib/r4.rb +5 -0
  9. data/lib/r4/config.rb +12 -0
  10. data/lib/r4/installations/default.rb +44 -0
  11. data/lib/r4/installations/testing.rb +4 -0
  12. data/lib/r4/odin.rb +76 -0
  13. data/lib/r4/recipes/bootstrap.rb +9 -0
  14. data/lib/r4/recipes/bootstrap_app.rb +10 -0
  15. data/lib/r4/recipes/devise.rb +94 -0
  16. data/lib/r4/recipes/exception_notification.rb +10 -0
  17. data/lib/r4/recipes/gemfile.rb +34 -0
  18. data/lib/r4/recipes/gitignore.rb +8 -0
  19. data/lib/r4/recipes/install_questions.rb +20 -0
  20. data/lib/r4/recipes/lazy_high_charts.rb +18 -0
  21. data/lib/r4/recipes/mysql.rb +22 -0
  22. data/lib/r4/recipes/rspec_generators.rb +18 -0
  23. data/lib/r4/recipes/upload_app.rb +9 -0
  24. data/lib/r4/recipes/wicked_pdf.rb +35 -0
  25. data/lib/r4/recipes/xlsx_support.rb +6 -0
  26. data/lib/r4/starter.rb +116 -0
  27. data/lib/r4/template/.ruby-version +1 -0
  28. data/lib/r4/template/app/assets/javascripts/main.js.rb +11 -0
  29. data/lib/r4/template/app/assets/stylesheets/custom.css.scss +128 -0
  30. data/lib/r4/template/app/assets/stylesheets/main.css.scss +7 -0
  31. data/lib/r4/template/app/assets/stylesheets/theme.css +7089 -0
  32. data/lib/r4/template/app/assets/stylesheets/timepress.css.scss +127 -0
  33. data/lib/r4/template/app/controllers/users_controller.rb +106 -0
  34. data/lib/r4/template/app/views/layouts/application.html.erb +64 -0
  35. data/lib/r4/template/app/views/users/_form.html.erb +64 -0
  36. data/lib/r4/template/app/views/users/edit.html.erb +10 -0
  37. data/lib/r4/template/app/views/users/edit_password.html.erb +49 -0
  38. data/lib/r4/template/app/views/users/index.html.erb +36 -0
  39. data/lib/r4/template/app/views/users/index.json.jbuilder +4 -0
  40. data/lib/r4/template/app/views/users/new.html.erb +9 -0
  41. data/lib/r4/template/app/views/users/show.html.erb +14 -0
  42. data/lib/r4/template/app/views/users/show.json.jbuilder +1 -0
  43. data/lib/r4/template/config/initializers/html_helpers.rb +99 -0
  44. data/lib/r4/template/config/locales/cs.yml +307 -0
  45. data/lib/r4/template/lib/tasks/bootstrap.rake +20 -0
  46. data/lib/r4/template/lib/tasks/upload.rake +24 -0
  47. data/lib/r4/version.rb +3 -0
  48. data/r4.gemspec +29 -0
  49. metadata +136 -0
@@ -0,0 +1,127 @@
1
+ @media (min-width: 1200px) {
2
+ .container-small {
3
+ width: 700px;
4
+ }
5
+ .container-large {
6
+ width: 1320px;
7
+ }
8
+ }
9
+
10
+ .container-small, .container-large {
11
+ max-width: 100%;
12
+ }
13
+
14
+ .table-responsive {
15
+ border-top: 1px solid #D0D3D4;
16
+ padding: 15px;
17
+ padding-bottom: 6px;
18
+ background: #fff;
19
+ }
20
+ .vertical-divider {
21
+ border-top: 1px solid #4E5D6C;
22
+ -webkit-box-shadow: inset 0px 1px 0px 0px rgba(78,93,108,1);
23
+ -moz-box-shadow: inset 0px 1px 0px 0px rgba(78,93,108,1);
24
+ box-shadow: inset 0px 1px 0px 0px rgba(198, 201, 203, 1);
25
+ }
26
+
27
+ .price-diff, .daylight-saving {
28
+ position: relative;
29
+ }
30
+
31
+ .price-diff:after {
32
+ content: " ";
33
+ width: 0;
34
+ height: 0;
35
+ position: absolute;
36
+ top: 8px;
37
+ left: 100%;
38
+ border-style: solid;
39
+ border-width: 4px 0 4px 5px;
40
+ border-color: transparent transparent transparent #eb2a2a;
41
+ }
42
+
43
+ .daylight-saving:after {
44
+ content: " ";
45
+ width: 0;
46
+ height: 0;
47
+ position: absolute;
48
+ top: 8px;
49
+ right: 0;
50
+ border-style: solid;
51
+ border-width: 4px 5px 4px 0;
52
+ border-color: transparent #31afd5 transparent transparent;
53
+ }
54
+
55
+ .period-select {
56
+ border-top: 1px solid #D0D3D4;
57
+ padding: 10px 15px;
58
+ background: #f0f0f0;
59
+ padding-bottom: 6px;
60
+ margin-bottom: 0px;
61
+ font-weight: 300;
62
+ overflow-x: auto;
63
+ white-space: nowrap;
64
+ .period-list {
65
+ overflow: auto;
66
+ }
67
+ span.year {
68
+ display: inline;
69
+ border-radius: 3px;
70
+ background: #4E5D6C;
71
+ color: #fff;
72
+ padding: 0 3px;
73
+ margin-right: 5px;
74
+ }
75
+ table {
76
+ a {
77
+ font-weight: 300;
78
+ color: #428bca;
79
+ display: inline;
80
+ }
81
+ a.active {
82
+ background: #DF691A;
83
+ color: white;
84
+ padding: 0 3px;
85
+ border-radius: 3px;
86
+ }
87
+ a:hover {
88
+ background: #31AFD5;
89
+ color: white;
90
+ padding: 0 3px;
91
+ border-radius: 3px;
92
+ text-decoration: none;
93
+ }
94
+ }
95
+ }
96
+
97
+
98
+ .period-select .mCSB_horizontal.mCSB_inside > .mCSB_container {
99
+ margin-bottom: 17px;
100
+ margin-right: 0;
101
+ }
102
+
103
+ .period-select.mCS_no_scrollbar .mCSB_horizontal.mCSB_inside > .mCSB_container {
104
+ margin-bottom: 0px;
105
+ }
106
+
107
+ .mCSB_scrollTools.mCSB_scrollTools_horizontal {
108
+ border-top: 1px dotted #D0D3D4;
109
+ padding-top: 5px;
110
+ height: 21px;
111
+ }
112
+
113
+ .period-select .mCSB_scrollTools.mCSB_scrollTools_horizontal {
114
+ border: none;
115
+ padding-top: 6px;
116
+ }
117
+
118
+ .mCSB_scrollTools.mCSB_scrollTools_horizontal a + .mCSB_draggerContainer {
119
+ margin-top: 6px;
120
+ }
121
+
122
+ .form {
123
+ background: #fff;
124
+ border-top: 1px solid #D0D3D4;
125
+ padding: 15px 0;
126
+ margin-bottom: 30px;
127
+ }
@@ -0,0 +1,106 @@
1
+ class UsersController < ApplicationController
2
+ before_action :set_user, only: [:show, :edit, :update, :destroy]
3
+ before_filter :only_for_admin, except: [:edit_own_password, :update_password]
4
+
5
+ # GET /users
6
+ # GET /users.json
7
+ def index
8
+ @users = User.all
9
+ end
10
+
11
+ # GET /users/1
12
+ # GET /users/1.json
13
+ def show
14
+ end
15
+
16
+ # GET /users/new
17
+ def new
18
+ @user = User.new
19
+ end
20
+
21
+ # GET /users/1/edit
22
+ def edit
23
+
24
+ end
25
+
26
+ def edit_password
27
+ @user = User.find(params[:id])
28
+ end
29
+
30
+ def edit_own_password
31
+ @user = current_user
32
+ render 'edit_password'
33
+ end
34
+
35
+ def update_password
36
+ @user = User.find(params[:id])
37
+ if @user.id == current_user.id
38
+ if @user.update_with_password(user_params)
39
+ sign_in @user, :bypass => true
40
+ redirect_to root_path
41
+ else
42
+ render 'edit_password'
43
+ end
44
+ else
45
+ if @user.update(user_params)
46
+ redirect_to root_path
47
+ else
48
+ render 'edit_password'
49
+ end
50
+ end
51
+ end
52
+
53
+ # POST /users
54
+ # POST /users.json
55
+ def create
56
+ @user = User.new(user_params)
57
+
58
+ respond_to do |format|
59
+ if @user.save
60
+ format.html { redirect_to users_url, notice: 'Uživatel byl uložen.' }
61
+ format.json { render :show, status: :created, location: @user }
62
+ else
63
+ format.html { render :new }
64
+ format.json { render json: @user.errors, status: :unprocessable_entity }
65
+ end
66
+ end
67
+ end
68
+
69
+ # PATCH/PUT /users/1
70
+ # PATCH/PUT /users/1.json
71
+ def update
72
+ respond_to do |format|
73
+ if @user.update(user_params)
74
+ format.html { redirect_to users_url, notice: 'Uživatel byl upraven.' }
75
+ format.json { render :show, status: :ok, location: @user }
76
+ else
77
+ format.html { render :edit }
78
+ format.json { render json: @user.errors, status: :unprocessable_entity }
79
+ end
80
+ end
81
+ end
82
+
83
+ # DELETE /users/1
84
+ # DELETE /users/1.json
85
+ def destroy
86
+ @user.destroy
87
+ respond_to do |format|
88
+ format.html { redirect_to users_url, notice: 'Uživatel byl odstraněn.' }
89
+ format.json { head :no_content }
90
+ end
91
+ end
92
+
93
+ private
94
+ # Use callbacks to share common setup or constraints between actions.
95
+ def set_user
96
+ @user = User.find(params[:id])
97
+ end
98
+
99
+
100
+
101
+ # Never trust parameters from the scary internet, only allow the white list through.
102
+ def user_params
103
+ params.required(:user).permit(:password, :password_confirmation, :current_password, :email,
104
+ :login, :firstname, :lastname)
105
+ end
106
+ end
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>PROJECT_NAME</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
7
+ <meta name="description" content="">
8
+ <meta name="author" content="">
9
+
10
+ <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
11
+ <!--[if lt IE 9]>
12
+ <%= javascript_include_tag "https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js", "https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js" %>
13
+ <![endif]-->
14
+
15
+ <%= favicon_link_tag 'favicon.png' %>
16
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
17
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
18
+ <%= csrf_meta_tags %>
19
+ </head>
20
+ <body>
21
+ <div class="navbar navbar-default navbar-fixed-top">
22
+ <div class="container container-large">
23
+ <div class="navbar-header">
24
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
25
+ <span class="sr-only">Toggle navigation</span>
26
+ <span class="icon-bar"></span>
27
+ <span class="icon-bar"></span>
28
+ <span class="icon-bar"></span>
29
+ </button>
30
+ </div>
31
+ <% if current_user %>
32
+ <div class="collapse navbar-collapse">
33
+ <ul class="nav navbar-nav">
34
+ <%= menu_item 'example', '#', /example(?!new)/ %>
35
+ </ul>
36
+ <ul class="nav navbar-nav navbar-right">
37
+ <li id="fat-menu" class="dropdown">
38
+ <a href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">
39
+ <i class="icon-user"></i> <%= 'Přihlášen' %>: <%= current_user.display_name %>
40
+ <i class="icon-caret-down"></i>
41
+ </a>
42
+ <ul class="dropdown-menu">
43
+ <li><%= link_to 'Změnit heslo', {controller: 'users', action: 'edit_own_password'} , :tabindex => -1 %></li>
44
+ <li class="divider"></li>
45
+ <li><%= link_to 'Odhlásit', destroy_user_session_path, :method => :delete %></li>
46
+ </ul>
47
+ </li>
48
+ </ul>
49
+ </div>
50
+ <% end %>
51
+ </div>
52
+ </div>
53
+ <div class="container container-large content">
54
+ <% flash.each do |name, msg| %>
55
+ <%= content_tag :div, :class => "alert alert-#{ name == :error ? "danger" : "success" } alert-dismissable" do %>
56
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
57
+ <%= msg %>
58
+ <% end %>
59
+ <% end %>
60
+
61
+ <%= yield %>
62
+ </div>
63
+ </body>
64
+ </html>
@@ -0,0 +1,64 @@
1
+ <%= form_for(@user, :html => { :class => "form-horizontal" }) do |f| %>
2
+ <% if @user.errors.any? %>
3
+ <div class="alert alert-danger alert-dismissable">
4
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
5
+ <ul>
6
+ <% @user.errors.messages.each do |msg| %>
7
+ <li><%= msg[1].first %></li>
8
+ <% end %>
9
+ </ul>
10
+ </div>
11
+ <% end %>
12
+
13
+ <div class="col-lg-8">
14
+ <div class="form-group">
15
+ <%= f.label :login, 'Login', :class => "col-sm-2 control-label" %>
16
+ <div class="col-sm-6">
17
+ <%= f.text_field :login, :class => "form-control" %>
18
+ </div>
19
+ </div>
20
+
21
+ <div class="form-group">
22
+ <%= f.label :email, 'E-mail', :class => "col-sm-2 control-label" %>
23
+ <div class="col-sm-6">
24
+ <%= f.text_field :email, :class => "form-control" %>
25
+ </div>
26
+ </div>
27
+
28
+ <div class="form-group">
29
+ <%= f.label :firstname, 'Jméno', :class => "col-sm-2 control-label" %>
30
+ <div class="col-sm-6">
31
+ <%= f.text_field :firstname, :class => "form-control" %>
32
+ </div>
33
+ </div>
34
+
35
+ <div class="form-group">
36
+ <%= f.label :lastname, 'Příjmení', :class => "col-sm-2 control-label" %>
37
+ <div class="col-sm-6">
38
+ <%= f.text_field :lastname, :class => "form-control" %>
39
+ </div>
40
+ </div>
41
+
42
+ <% if params[:action] == 'new' || params[:action] == 'create' %>
43
+ <div class="form-group">
44
+ <%= f.label :password, 'Heslo', :class => "col-sm-2 control-label" %>
45
+ <div class="col-sm-4">
46
+ <%= f.password_field :password, :class => "form-control" %>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="form-group">
51
+ <%= f.label :password_confirmation, 'Potvrzení hesla', :class => "col-sm-2 control-label" %>
52
+ <div class="col-sm-4">
53
+ <%= f.password_field :password_confirmation, :class => "form-control" %>
54
+ </div>
55
+ </div>
56
+ <% end %>
57
+
58
+ <div class="form-group">
59
+ <div class="col-sm-offset-2 col-sm-6">
60
+ <%= f.submit 'Uložit', class: 'btn btn-primary' %>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <div class="page-header">
2
+ <%= delete_button @user, 'Opravdu chcete uživatel odstranit?' %>
3
+ <%= link_to users_path, :class => 'btn btn-default' do %>
4
+ <span class="glyphicon glyphicon-list-alt"></span>
5
+ Zpět
6
+ <% end %>
7
+ <h1>Úprava uživatele</h1>
8
+ </div>
9
+
10
+ <%= render 'form' %>
@@ -0,0 +1,49 @@
1
+ <div class="page-header">
2
+ <% if @user.errors.any? %>
3
+ <div class="alert alert-danger alert-dismissable">
4
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
5
+ <ul>
6
+ <% @user.errors.messages.each do |msg| %>
7
+ <li><%= msg[1].first %></li>
8
+ <% end %>
9
+ </ul>
10
+ </div>
11
+ <% end %>
12
+
13
+ <h1>Změna hesla</h1>
14
+ </div>
15
+
16
+ <%= form_for(@user, url: { action: 'update_password', id: @user }, html: { class: "form-horizontal" } ) do |f| %>
17
+
18
+ <div class="col-lg-8">
19
+
20
+ <% unless current_user.admin? && @user.id != current_user.id%>
21
+ <div class="form-group">
22
+ <%= f.label :current_password, 'Současné heslo', :class => "col-sm-2 control-label" %>
23
+ <div class="col-sm-4">
24
+ <%= f.password_field :current_password, :class => "form-control" %>
25
+ </div>
26
+ </div>
27
+ <% end %>
28
+
29
+ <div class="form-group">
30
+ <%= f.label :password, 'Heslo', :class => "col-sm-2 control-label" %>
31
+ <div class="col-sm-4">
32
+ <%= f.password_field :password, :class => "form-control" %>
33
+ </div>
34
+ </div>
35
+
36
+ <div class="form-group">
37
+ <%= f.label :password_confirmation, 'Potvrzení hesla', :class => "col-sm-2 control-label" %>
38
+ <div class="col-sm-4">
39
+ <%= f.password_field :password_confirmation, :class => "form-control" %>
40
+ </div>
41
+ </div>
42
+
43
+ <div class="form-group">
44
+ <div class="col-sm-offset-2 col-sm-4">
45
+ <%= f.submit 'Změnit heslo', class: 'btn btn-primary' %>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ <% end %>
@@ -0,0 +1,36 @@
1
+ <div class="page-header">
2
+ <%= link_to new_user_path, :class => 'btn btn-primary' do %>
3
+ <span class="glyphicon glyphicon-plus"></span>
4
+ Nový uživatel
5
+ <% end %>
6
+ <h1>Seznam uživatelů</h1>
7
+ </div>
8
+
9
+ <div class="table-responsive">
10
+ <table class="table table-striped table-bordered table-hover">
11
+ <thead>
12
+ <tr>
13
+ <th>E-mail</th>
14
+ <th>Login</th>
15
+ <th>Jméno</th>
16
+ <th>Příjmení</th>
17
+ <th>Admin</th>
18
+ <th>Poslední přihlášení</th>
19
+ <th colspan="2">Akce</th>
20
+ </tr>
21
+ </thead>
22
+
23
+ <tbody>
24
+ <%= content_tag_for(:tr, @users) do |user| %>
25
+ <td <%= 'style="font-weight:bold"'.html_safe if user.admin? %>><%= user.email %></td>
26
+ <td><%= user.login %></td>
27
+ <td><%= user.firstname %></td>
28
+ <td><%= user.lastname %></td>
29
+ <td><%= user.admin ? 'A' : '' %></td>
30
+ <td><%= lf user.last_sign_in_at, :format=>'long' %></td>
31
+ <td><%= link_to 'Upravit', edit_user_path(user) %></td>
32
+ <td><%= link_to 'Heslo', {action: 'edit_password', id: user} %></td>
33
+ <% end %>
34
+ </tbody>
35
+ </table>
36
+ </div>