rear 0.2.0
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.
- checksums.yaml +15 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +20 -0
- data/LICENSE +19 -0
- data/README.md +101 -0
- data/Rakefile +79 -0
- data/assets/api.js +307 -0
- data/assets/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css +8 -0
- data/assets/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js +26 -0
- data/assets/bootstrap/css/bootstrap-responsive.min.css +9 -0
- data/assets/bootstrap/css/bootstrap.min.css +9 -0
- data/assets/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/assets/bootstrap/img/glyphicons-halflings.png +0 -0
- data/assets/bootstrap/js/bootstrap.min.js +6 -0
- data/assets/jquery.js +5 -0
- data/assets/noty/jquery.noty.js +520 -0
- data/assets/noty/layouts/top.js +34 -0
- data/assets/noty/layouts/topRight.js +43 -0
- data/assets/noty/promise.js +432 -0
- data/assets/noty/themes/default.js +156 -0
- data/assets/select2-bootstrap.css +86 -0
- data/assets/select2/select2-spinner.gif +0 -0
- data/assets/select2/select2.css +652 -0
- data/assets/select2/select2.min.js +22 -0
- data/assets/select2/select2.png +0 -0
- data/assets/select2/select2x2.png +0 -0
- data/assets/ui.css +75 -0
- data/assets/xhr.js +4 -0
- data/bin/rear +65 -0
- data/docs/Assocs.md +100 -0
- data/docs/Columns.md +404 -0
- data/docs/Deploy.md +62 -0
- data/docs/FileManager.md +75 -0
- data/docs/Filters.md +341 -0
- data/docs/Setup.md +201 -0
- data/lib/rear.rb +13 -0
- data/lib/rear/actions.rb +98 -0
- data/lib/rear/constants.rb +61 -0
- data/lib/rear/controller_setup.rb +249 -0
- data/lib/rear/helpers.rb +17 -0
- data/lib/rear/helpers/class.rb +46 -0
- data/lib/rear/helpers/columns.rb +68 -0
- data/lib/rear/helpers/filters.rb +147 -0
- data/lib/rear/helpers/generic.rb +73 -0
- data/lib/rear/helpers/order.rb +47 -0
- data/lib/rear/helpers/pager.rb +35 -0
- data/lib/rear/helpers/render.rb +37 -0
- data/lib/rear/home_controller.rb +10 -0
- data/lib/rear/input.rb +341 -0
- data/lib/rear/orm.rb +73 -0
- data/lib/rear/rear.rb +74 -0
- data/lib/rear/setup.rb +9 -0
- data/lib/rear/setup/associations.rb +33 -0
- data/lib/rear/setup/columns.rb +109 -0
- data/lib/rear/setup/filters.rb +314 -0
- data/lib/rear/setup/generic.rb +59 -0
- data/lib/rear/setup/menu.rb +39 -0
- data/lib/rear/templates/editor/ace.slim +7 -0
- data/lib/rear/templates/editor/assocs.slim +10 -0
- data/lib/rear/templates/editor/boolean.slim +5 -0
- data/lib/rear/templates/editor/bulk_edit.slim +75 -0
- data/lib/rear/templates/editor/checkbox.slim +5 -0
- data/lib/rear/templates/editor/ckeditor.slim +7 -0
- data/lib/rear/templates/editor/date.slim +9 -0
- data/lib/rear/templates/editor/datetime.slim +9 -0
- data/lib/rear/templates/editor/layout.slim +103 -0
- data/lib/rear/templates/editor/password.slim +1 -0
- data/lib/rear/templates/editor/radio.slim +5 -0
- data/lib/rear/templates/editor/select.slim +3 -0
- data/lib/rear/templates/editor/string.slim +1 -0
- data/lib/rear/templates/editor/text.slim +1 -0
- data/lib/rear/templates/editor/time.slim +9 -0
- data/lib/rear/templates/error.slim +36 -0
- data/lib/rear/templates/filters/boolean.slim +10 -0
- data/lib/rear/templates/filters/checkbox.slim +15 -0
- data/lib/rear/templates/filters/date.slim +10 -0
- data/lib/rear/templates/filters/datetime.slim +10 -0
- data/lib/rear/templates/filters/layout.slim +26 -0
- data/lib/rear/templates/filters/radio.slim +14 -0
- data/lib/rear/templates/filters/select.slim +9 -0
- data/lib/rear/templates/filters/string.slim +3 -0
- data/lib/rear/templates/filters/text.slim +3 -0
- data/lib/rear/templates/filters/time.slim +10 -0
- data/lib/rear/templates/home.slim +0 -0
- data/lib/rear/templates/layout.slim +78 -0
- data/lib/rear/templates/pager.slim +22 -0
- data/lib/rear/templates/pane/ace.slim +2 -0
- data/lib/rear/templates/pane/assocs.slim +62 -0
- data/lib/rear/templates/pane/boolean.slim +2 -0
- data/lib/rear/templates/pane/checkbox.slim +5 -0
- data/lib/rear/templates/pane/ckeditor.slim +2 -0
- data/lib/rear/templates/pane/date.slim +2 -0
- data/lib/rear/templates/pane/datetime.slim +2 -0
- data/lib/rear/templates/pane/layout.slim +111 -0
- data/lib/rear/templates/pane/password.slim +2 -0
- data/lib/rear/templates/pane/quickview.slim +21 -0
- data/lib/rear/templates/pane/radio.slim +5 -0
- data/lib/rear/templates/pane/select.slim +5 -0
- data/lib/rear/templates/pane/string.slim +2 -0
- data/lib/rear/templates/pane/text.slim +2 -0
- data/lib/rear/templates/pane/time.slim +2 -0
- data/lib/rear/utils.rb +288 -0
- data/rear.gemspec +27 -0
- data/test/helpers.rb +33 -0
- data/test/models/ar.rb +52 -0
- data/test/models/dm.rb +53 -0
- data/test/models/sq.rb +58 -0
- data/test/setup.rb +4 -0
- data/test/templates/adhoc/book/editor/name.slim +1 -0
- data/test/templates/adhoc/book/editor/string.slim +1 -0
- data/test/templates/adhoc/book/pane/name.slim +1 -0
- data/test/templates/adhoc/book/pane/string.slim +1 -0
- data/test/templates/shared/shared-templates/editor/string.slim +1 -0
- data/test/templates/shared/shared-templates/pane/string.slim +1 -0
- data/test/test__assocs.rb +249 -0
- data/test/test__columns.rb +269 -0
- data/test/test__crud.rb +81 -0
- data/test/test__custom_templates.rb +147 -0
- data/test/test__filters.rb +228 -0
- metadata +220 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module RearSetup
|
|
2
|
+
|
|
3
|
+
# tell controller to create a CRUD interface for given model
|
|
4
|
+
# opts and proc will be passed to Espresso's `crudify` helper.
|
|
5
|
+
#
|
|
6
|
+
# @param [Class] model
|
|
7
|
+
# @param [Hash] opts to be passed to `crudify` method
|
|
8
|
+
# @param [Proc] proc to be passed to `crudify` method
|
|
9
|
+
#
|
|
10
|
+
def model model = nil, opts = {}, &proc
|
|
11
|
+
return @__rear__model if @__rear__model || model.nil?
|
|
12
|
+
model = RearUtils.extract_constant(model)
|
|
13
|
+
RearUtils.is_orm?(model) ||
|
|
14
|
+
raise(ArgumentError, '"%s" is not a ActiveRecord/DataMapper/Sequel model' % model.inspect)
|
|
15
|
+
@__rear__model = model
|
|
16
|
+
@__rear__default_label = model.name.gsub(/\W/, '_').freeze
|
|
17
|
+
RearControllerSetup.crudify self, model, opts, &proc
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def pkey key = nil
|
|
21
|
+
return unless model
|
|
22
|
+
@__rear__pkey = key if key
|
|
23
|
+
@__rear__pkey ||
|
|
24
|
+
raise(ArgumentError, "Was unable to automatically detect primary key for %s model.
|
|
25
|
+
Please set it manually via `pkey key_name`" % model)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def order_by *columns
|
|
29
|
+
@__rear__order = columns if columns.any?
|
|
30
|
+
@__rear__order
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def items_per_page n = nil
|
|
34
|
+
@__rear__ipp = n.to_i if n
|
|
35
|
+
@__rear__ipp || 10
|
|
36
|
+
end
|
|
37
|
+
alias ipp items_per_page
|
|
38
|
+
|
|
39
|
+
# executed when new item created and when existing item updated
|
|
40
|
+
def on_save &proc
|
|
41
|
+
# const_get(:RearController).
|
|
42
|
+
before :save, &proc
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# executed when existing item updated
|
|
46
|
+
def on_update &proc
|
|
47
|
+
before :update, &proc
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def on_delete &proc
|
|
51
|
+
before :destroy, &proc
|
|
52
|
+
end
|
|
53
|
+
alias on_destroy on_delete
|
|
54
|
+
|
|
55
|
+
def readonly!
|
|
56
|
+
@__rear__readonly = true
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module RearSetup
|
|
2
|
+
|
|
3
|
+
# by default all controllers are shown in main menu
|
|
4
|
+
# using the demodulized controller name.
|
|
5
|
+
#
|
|
6
|
+
# to use a custom label, set it via `menu_label` or its alias - `label`
|
|
7
|
+
# to hide a controller from menu set label to false.
|
|
8
|
+
def menu_label label = nil
|
|
9
|
+
@__rear__menu_label = label.freeze if label || label == false
|
|
10
|
+
@__rear__menu_label.nil? ? default_label : @__rear__menu_label
|
|
11
|
+
end
|
|
12
|
+
alias label menu_label
|
|
13
|
+
|
|
14
|
+
# by default controllers will be shown in the menu in the order they was defined.
|
|
15
|
+
# to have a controller shown before other ones set its menu_position to a higher number.
|
|
16
|
+
def menu_position position = nil
|
|
17
|
+
@__rear__menu_position = position.to_i if position
|
|
18
|
+
@__rear__menu_position || 0
|
|
19
|
+
end
|
|
20
|
+
alias position menu_position
|
|
21
|
+
|
|
22
|
+
# put current controller under some group.
|
|
23
|
+
#
|
|
24
|
+
# @example put Articles and Pages under Cms dropdown
|
|
25
|
+
# class Articles < E
|
|
26
|
+
# include Rear
|
|
27
|
+
# under :Cms
|
|
28
|
+
# end
|
|
29
|
+
# class Pages < E
|
|
30
|
+
# include Rear
|
|
31
|
+
# under :Cms
|
|
32
|
+
# end
|
|
33
|
+
#
|
|
34
|
+
def menu_group group = nil
|
|
35
|
+
@__rear__menu_group = group.to_s if group
|
|
36
|
+
@__rear__menu_group
|
|
37
|
+
end
|
|
38
|
+
alias under menu_group
|
|
39
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
- editor_id = "EditorFor" + column.string_name.capitalize
|
|
2
|
+
- a = {id: editor_id, name: column.name?}
|
|
3
|
+
textarea.input-block-level.text_editor *a *attrs(column, :editor) = value
|
|
4
|
+
|
|
5
|
+
- if defined?(EL::Ace)
|
|
6
|
+
- o = {readonly: column.readonly? || readonly?, snippets: column.snippets}
|
|
7
|
+
== ace editor_id, o
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
- assocs(assoc_type).each_pair do |assoc_name, assoc|
|
|
2
|
+
- remote_ctrl = associated_model_controller(assoc[:remote_model])
|
|
3
|
+
- remote_url = remote_ctrl.route(:reverse_assoc, self.class, assoc_type, assoc_name, item_id)
|
|
4
|
+
.tab-pane id="editor-tabs-#{assoc_name}"
|
|
5
|
+
javascript:
|
|
6
|
+
$(function(){
|
|
7
|
+
new Rear.Assoc('#{remote_url}', '##{assoc[:dom_id]}').load();
|
|
8
|
+
});
|
|
9
|
+
div id=(assoc[:dom_id])
|
|
10
|
+
div id=(assoc[:dom_id] + '_detached')
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
|
|
2
|
+
- crudifier_toggler = lambda do |column, dom_id, opts={}|
|
|
3
|
+
label.checkbox.inline class=('pull-right' unless opts[:left])
|
|
4
|
+
- name = 'rear-bulk_editor-crudifier_toggler[]'
|
|
5
|
+
input name=name type="checkbox" id=(dom_id + '-update_me') value=column
|
|
6
|
+
= 'Update %s' % (opts[:label] || column)
|
|
7
|
+
|
|
8
|
+
form.form-horizontal#bulk_editor-main_form
|
|
9
|
+
input.hidden type="hidden" name="rear-bulk_editor-items" value=@items
|
|
10
|
+
ul.nav.nav-tabs
|
|
11
|
+
li.active
|
|
12
|
+
a href="#editor-tabs-generic" data-toggle="tab"
|
|
13
|
+
i.icon-edit
|
|
14
|
+
|
|
|
15
|
+
= __rear__.label || __rear__.default_label
|
|
16
|
+
|
|
17
|
+
- assocs(:belongs_to).each_key do |a|
|
|
18
|
+
li
|
|
19
|
+
a href="#editor-tabs-#{a}" data-toggle="tab"
|
|
20
|
+
i.icon-tags
|
|
21
|
+
|
|
|
22
|
+
= a
|
|
23
|
+
|
|
24
|
+
.tab-content
|
|
25
|
+
.tab-pane.active#editor-tabs-generic
|
|
26
|
+
|
|
27
|
+
- rowed_columns = {}
|
|
28
|
+
- editor_columns.each do |column|
|
|
29
|
+
javascript:
|
|
30
|
+
$('.#{column.css_class}').change(function(){
|
|
31
|
+
$('##{column.dom_id}-update_me').prop('checked', true);
|
|
32
|
+
});
|
|
33
|
+
- next if rowed_columns[column.__id__]
|
|
34
|
+
- if column.row?
|
|
35
|
+
- if column.row.is_a?(String)
|
|
36
|
+
.row-fluid
|
|
37
|
+
.span style="text-align: center;"
|
|
38
|
+
h4.muted
|
|
39
|
+
= column.row
|
|
40
|
+
|
|
41
|
+
.row-fluid
|
|
42
|
+
- row_columns = editor_columns.select {|c| c.row == column.row}
|
|
43
|
+
- row_columns.each do |rc|
|
|
44
|
+
- self.column = rc
|
|
45
|
+
- rowed_columns[rc.__id__] = true
|
|
46
|
+
div class=('span%s' % (12 / row_columns.size).ceil)
|
|
47
|
+
.editor-column_container title=rc.label
|
|
48
|
+
.editor-column_value
|
|
49
|
+
== render_editor_column rc
|
|
50
|
+
- crudifier_toggler.call rc.name, rc.dom_id
|
|
51
|
+
|
|
52
|
+
- else
|
|
53
|
+
- self.column = column
|
|
54
|
+
.editor-column_container title=column.label
|
|
55
|
+
.editor-column_value
|
|
56
|
+
== render_editor_column column
|
|
57
|
+
- crudifier_toggler.call column.name, column.dom_id
|
|
58
|
+
|
|
59
|
+
- assocs(:belongs_to).each_pair do |assoc_name, assoc|
|
|
60
|
+
- remote_ctrl = associated_model_controller(assoc[:remote_model])
|
|
61
|
+
- remote_url = remote_ctrl.route(:reverse_assoc, self.class, :belongs_to, assoc_name, item_id)
|
|
62
|
+
.tab-pane id="editor-tabs-#{assoc_name}"
|
|
63
|
+
javascript:
|
|
64
|
+
$(function(){
|
|
65
|
+
new Rear.Assoc('#{remote_url}', '##{assoc[:dom_id]}').load_detached(function() {
|
|
66
|
+
$('.#{assoc[:dom_id]}_detached-assoc_toggler').change(function() {
|
|
67
|
+
$('##{assoc[:dom_id]}-update_me').prop('checked', true);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
- column = assoc[:belongs_to_keys][:source]
|
|
73
|
+
- crudifier_toggler.call column, assoc[:dom_id], left: true, label: assoc[:name]
|
|
74
|
+
|
|
75
|
+
div id=(assoc[:dom_id] + '_detached')
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
- editor_id = "EditorFor" + column.string_name.capitalize
|
|
2
|
+
- a = {id: editor_id, name: column.name?}
|
|
3
|
+
textarea.input-block-level.text_editor *a *attrs(column, :editor) = value
|
|
4
|
+
|
|
5
|
+
- if defined?(EL::CKE)
|
|
6
|
+
- o = {readonly: column.readonly? || readonly?, snippets: column.snippets}
|
|
7
|
+
== ckeditor editor_id, o.merge(column.ckeditor_opts)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
- value = value.strftime('%Y-%m-%d') if value.kind_of?(Date)
|
|
2
|
+
- a = {name: column.name?, type: "text", value: value, "data-format" => "yyyy-MM-dd"}
|
|
3
|
+
.input-append.date id=column.name?
|
|
4
|
+
input.input-small *a *attrs(column, :editor)
|
|
5
|
+
span.add-on
|
|
6
|
+
i data-time-icon="icon-time" data-date-icon="icon-calendar" class=column.css_class
|
|
7
|
+
- if column.name?
|
|
8
|
+
javascript:
|
|
9
|
+
$(function() {$('##{column.name}').datetimepicker({pickTime: false})});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
- value = value.strftime('%Y-%m-%d %H:%M:%S') if value.kind_of?(DateTime)
|
|
2
|
+
- a = {name: column.name?, type: "text", value: value, "data-format" => "yyyy-MM-dd hh:mm:ss"}
|
|
3
|
+
.input-append.date id=column.name?
|
|
4
|
+
input.input-medium *a *attrs(column, :editor)
|
|
5
|
+
span.add-on
|
|
6
|
+
i data-time-icon="icon-time" data-date-icon="icon-calendar" class=column.css_class
|
|
7
|
+
- if column.name?
|
|
8
|
+
javascript:
|
|
9
|
+
$(function() {$('##{column.name}').datetimepicker()});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
javascript:
|
|
2
|
+
var crudifier = new Rear.CRUD(#{item_id}, '#{self[:crud]}', '#{self[:edit]}', #{readonly? ? true : false});
|
|
3
|
+
|
|
4
|
+
- if readonly?
|
|
5
|
+
javascript:
|
|
6
|
+
$(function(){
|
|
7
|
+
Rear.sticky_warn('ReadOnly Mode! Any updates will be discarded!')
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
.row-fluid
|
|
11
|
+
.span8
|
|
12
|
+
|
|
13
|
+
form.form-horizontal#editor-main_form
|
|
14
|
+
ul.nav.nav-tabs
|
|
15
|
+
li.active
|
|
16
|
+
a href="#editor-tabs-generic" data-toggle="tab"
|
|
17
|
+
i.icon-edit
|
|
18
|
+
|
|
|
19
|
+
= __rear__.label || __rear__.default_label
|
|
20
|
+
|
|
21
|
+
- assocs(:belongs_to).each_key do |a|
|
|
22
|
+
li
|
|
23
|
+
a href="#editor-tabs-#{a}" data-toggle="tab"
|
|
24
|
+
i.icon-tags
|
|
25
|
+
|
|
|
26
|
+
= a
|
|
27
|
+
|
|
28
|
+
- if item_id > 0
|
|
29
|
+
- assocs(:has_one, :has_many).each_key do |a|
|
|
30
|
+
li
|
|
31
|
+
a href="#editor-tabs-#{a}" data-toggle="tab"
|
|
32
|
+
i.icon-tags
|
|
33
|
+
|
|
|
34
|
+
= a
|
|
35
|
+
li
|
|
36
|
+
a href=route(:edit, 0)
|
|
37
|
+
span.badge.badge-warning
|
|
38
|
+
i.icon-plus
|
|
39
|
+
| New
|
|
40
|
+
|
|
41
|
+
- if item_id > 0
|
|
42
|
+
li
|
|
43
|
+
a onclick="if(confirm('This action can not be undone! Continue?')) { crudifier.delete('#{{route(pager_params)}}') } else { return false }" href="#"
|
|
44
|
+
span.badge.badge-important
|
|
45
|
+
i.icon-remove
|
|
46
|
+
| Delete
|
|
47
|
+
|
|
48
|
+
li
|
|
49
|
+
a.saveButton onclick="crudifier.save();" href="javascript:void(null);"
|
|
50
|
+
span.badge.badge-success#editor-save_badge
|
|
51
|
+
i.icon-check
|
|
52
|
+
| Save
|
|
53
|
+
|
|
54
|
+
.tab-content style="min-height: 50em;"
|
|
55
|
+
.tab-pane.active#editor-tabs-generic
|
|
56
|
+
|
|
57
|
+
- rowed_columns = []
|
|
58
|
+
- editor_columns.each do |column|
|
|
59
|
+
- next if rowed_columns.include?(column.__id__)
|
|
60
|
+
- if column.row?
|
|
61
|
+
- if column.row.is_a?(String)
|
|
62
|
+
.row-fluid
|
|
63
|
+
.span style="text-align: center;"
|
|
64
|
+
h4.muted
|
|
65
|
+
= column.row
|
|
66
|
+
|
|
67
|
+
.row-fluid
|
|
68
|
+
- columns = editor_columns.select {|c| c.row == column.row}
|
|
69
|
+
- columns.each do |rc|
|
|
70
|
+
- self.column = rc
|
|
71
|
+
- rowed_columns << rc.__id__
|
|
72
|
+
div class=('span%s' % (12 / columns.size).ceil)
|
|
73
|
+
.editor-column_container title=rc.label
|
|
74
|
+
.editor-column_value
|
|
75
|
+
== render_editor_column rc
|
|
76
|
+
|
|
77
|
+
- else
|
|
78
|
+
- self.column = column
|
|
79
|
+
.editor-column_container title=column.label
|
|
80
|
+
.editor-column_value
|
|
81
|
+
== render_editor_column column
|
|
82
|
+
|
|
83
|
+
== reander_p 'editor/assocs', assoc_type: :belongs_to
|
|
84
|
+
- if item_id > 0
|
|
85
|
+
- [:has_one, :has_many].each do |type|
|
|
86
|
+
== reander_p 'editor/assocs', assoc_type: type
|
|
87
|
+
|
|
88
|
+
hr
|
|
89
|
+
.row-fluid
|
|
90
|
+
.pull-right
|
|
91
|
+
a.btn.saveButton onclick="crudifier.save();" style="width: 10em;"
|
|
92
|
+
i.icon-check
|
|
93
|
+
| Save
|
|
94
|
+
|
|
95
|
+
.span4
|
|
96
|
+
#editor-navigation.hide_under_940px
|
|
97
|
+
javascript:
|
|
98
|
+
$(function(){
|
|
99
|
+
$.ajax({
|
|
100
|
+
type: 'GET',
|
|
101
|
+
url: '#{{route :quickview, pager_params.merge(selected: item_id.to_s)}}'
|
|
102
|
+
}).done(function(response){ $('#editor-navigation').html(response) });
|
|
103
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
input.input-block-level type="password" name=column.name? value=value *attrs(column, :editor)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
input.input-block-level type="text" name=column.name? value=value *attrs(column, :editor)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
textarea.text_editor.input-block-level name=column.name? *attrs(column, :editor) = value
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
- value = value.strftime('%H:%M:%S') if value.kind_of?(Time)
|
|
2
|
+
- a = {name: column.name?, type: "text", value: value, "data-format" => "hh:mm:ss"}
|
|
3
|
+
.input-append.date id=column.name?
|
|
4
|
+
input.input-small *a *attrs(column, :editor)
|
|
5
|
+
span.add-on
|
|
6
|
+
i data-time-icon="icon-time" data-date-icon="icon-calendar" class=column.css_class
|
|
7
|
+
- if column.name?
|
|
8
|
+
javascript:
|
|
9
|
+
$(function() {$('##{column.name}').datetimepicker({pickDate: false})});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
.alert.alert-error
|
|
2
|
+
h4 Something went wrong...
|
|
3
|
+
.text-info
|
|
4
|
+
| Please consider to report this at
|
|
5
|
+
a href="https://github.com/espresso/rear/issues" github.com/espresso/rear
|
|
6
|
+
h5 = error.first
|
|
7
|
+
|
|
8
|
+
h4.text-info Backtrace:
|
|
9
|
+
- error.each do |l|
|
|
10
|
+
div = l
|
|
11
|
+
|
|
12
|
+
h4.text-info Path:
|
|
13
|
+
= rq.path
|
|
14
|
+
|
|
15
|
+
h4.text-info Request Method:
|
|
16
|
+
= rq.request_method
|
|
17
|
+
|
|
18
|
+
h4.text-info Params:
|
|
19
|
+
table
|
|
20
|
+
- params.each_pair do |key,val|
|
|
21
|
+
tr
|
|
22
|
+
td
|
|
23
|
+
.pull-right.text-info
|
|
24
|
+
= '%s: ' % key
|
|
25
|
+
td
|
|
26
|
+
= val.is_a?(String) ? val : val.inspect
|
|
27
|
+
|
|
28
|
+
h4.text-info Env:
|
|
29
|
+
table
|
|
30
|
+
- env.each_pair do |key,val|
|
|
31
|
+
tr
|
|
32
|
+
td
|
|
33
|
+
.pull-right.text-info
|
|
34
|
+
= '%s: ' % key
|
|
35
|
+
td
|
|
36
|
+
= val.is_a?(String) ? val : val.inspect
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
- values = value.is_a?(Array) ? value : []
|
|
2
|
+
- if setup[:decorative?]
|
|
3
|
+
- attrs[:onclick] = "new Rear.Filters('%s', '%s').update();" % \
|
|
4
|
+
[dom_id, route(:html_filters, true, dom_id: dom_id)]
|
|
5
|
+
|
|
6
|
+
.input-prepend.input-append
|
|
7
|
+
span.add-on
|
|
8
|
+
= setup[:label]
|
|
9
|
+
|
|
10
|
+
span.add-on
|
|
11
|
+
- filter_setup_to_options(setup).each_pair do |v,l|
|
|
12
|
+
- attrs[:checked] = values.include?(v.to_s)
|
|
13
|
+
label.checkbox
|
|
14
|
+
input name=('%s[]' % name) type="checkbox" value=v *attrs = l
|
|
15
|
+
|
|