cable 0.9.10 → 0.9.11
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.
- data/VERSION +1 -1
- data/app/controllers/admin_controller.rb +2 -0
- data/app/controllers/cable/cable_admin_controller.rb +1 -1
- data/app/helpers/admin_helper.rb +4 -0
- data/app/views/layouts/admin.html.erb +6 -32
- data/app/views/layouts/admin/_dual_column_layout.html.erb +18 -0
- data/app/views/layouts/admin/_single_column_layout.html.erb +12 -0
- data/lib/generators/cable/install_generator.rb +3 -2
- data/lib/generators/cable/menu/templates/controller.rb +34 -30
- data/lib/generators/cable/menu/templates/erb/menus/_menu.html.erb +90 -19
- data/lib/generators/cable/menu/templates/erb/menus/_resources.html.erb +21 -0
- data/lib/generators/cable/menu/templates/erb/menus/resources.js.erb +1 -0
- data/lib/generators/cable/menu/templates/erb/menus/show.html.erb +1 -1
- data/lib/generators/cable/menu/templates/erb/menus/sort.js.erb +1 -0
- data/public/javascripts/cable_menu.js +5 -1
- data/public/javascripts/jquery.quicksearch.js +150 -0
- data/public/stylesheets/cable/formtastic_changes.css +6 -1
- data/public/stylesheets/cable/menu.css +51 -24
- data/public/stylesheets/cable/regions.css +3 -1
- metadata +35 -69
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.9.
|
|
1
|
+
0.9.11
|
data/app/helpers/admin_helper.rb
CHANGED
|
@@ -24,40 +24,14 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
<div id="main-wrapper">
|
|
26
26
|
<div class="container">
|
|
27
|
+
<% content_for :admin_sub_navigation do %>
|
|
28
|
+
<%= render_navigation(:level => 2..5, :context => :admin) %>
|
|
29
|
+
<% end %>
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
<div class="prepend-15">
|
|
31
|
-
<%= render :partial => "layouts/search" %>
|
|
32
|
-
</div>
|
|
33
|
-
<div id="main" class="span-24">
|
|
34
|
-
<div class="box shadow">
|
|
35
|
-
<h2 id="title"><%= @page_title %></h2>
|
|
36
|
-
<div id="help"><%= yield :help %><a class="button">Help</a></div>
|
|
37
|
-
<%= yield :page_menu %>
|
|
38
|
-
<%= render :partial => 'layouts/messages' %>
|
|
39
|
-
<%= yield %>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
31
|
+
<% if single_column? %>
|
|
32
|
+
<%= render :partial => "layouts/admin/single_column_layout" %>
|
|
42
33
|
<% else %>
|
|
43
|
-
|
|
44
|
-
<div id="secondary-navigation" class="box shadow"><%= render_navigation(:level => 2..5, :context => :admin) %></div>
|
|
45
|
-
<%= yield :sidebar %>
|
|
46
|
-
</div>
|
|
47
|
-
|
|
48
|
-
<div class='span-11'><%= render :partial => 'layouts/breadcrumb' %></div>
|
|
49
|
-
<%= render :partial => "layouts/search" %>
|
|
50
|
-
|
|
51
|
-
<div id="main" class="span-20 last">
|
|
52
|
-
<div class="box shadow">
|
|
53
|
-
|
|
54
|
-
<h2 id="title"><%= @page_title %></h2>
|
|
55
|
-
<div id="help"><%= yield :help %><a class="button">Help</a></div>
|
|
56
|
-
<%= yield :page_menu %>
|
|
57
|
-
<%= render :partial => 'layouts/messages' %>
|
|
58
|
-
<%= yield %>
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
34
|
+
<%= render :partial => "layouts/admin/dual_column_layout" %>
|
|
61
35
|
<% end %>
|
|
62
36
|
</div>
|
|
63
37
|
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<div id="right-col" class="span-4">
|
|
2
|
+
<div id="secondary-navigation" class="box shadow"><%= yield :admin_sub_navigation %></div>
|
|
3
|
+
<%= yield :sidebar %>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div class='span-11'><%= render :partial => 'layouts/breadcrumb' %></div>
|
|
7
|
+
<%= render :partial => "layouts/search" %>
|
|
8
|
+
|
|
9
|
+
<div id="main" class="span-20 last">
|
|
10
|
+
<div class="box shadow">
|
|
11
|
+
|
|
12
|
+
<h2 id="title"><%= @page_title %></h2>
|
|
13
|
+
<div id="help"><%= yield :help %><a class="button">Help</a></div>
|
|
14
|
+
<%= yield :page_menu %>
|
|
15
|
+
<%= render :partial => 'layouts/messages' %>
|
|
16
|
+
<%= yield %>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<div class="prepend-15">
|
|
2
|
+
<%= render :partial => "layouts/search" %>
|
|
3
|
+
</div>
|
|
4
|
+
<div id="main" class="span-24">
|
|
5
|
+
<div class="box shadow">
|
|
6
|
+
<h2 id="title"><%= @page_title %></h2>
|
|
7
|
+
<div id="help"><%= yield :help %><a class="button">Help</a></div>
|
|
8
|
+
<%= yield :page_menu %>
|
|
9
|
+
<%= render :partial => 'layouts/messages' %>
|
|
10
|
+
<%= yield %>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
@@ -62,6 +62,7 @@ module Cable
|
|
|
62
62
|
|
|
63
63
|
def install_admin
|
|
64
64
|
copy_file "app/views/layouts/admin.html.erb", 'app/views/layouts/admin.html.erb'
|
|
65
|
+
directory 'app/views/layouts/admin', 'app/views/layouts/admin'
|
|
65
66
|
directory "public/stylesheets/tinymce", "public/stylesheets/tinymce"
|
|
66
67
|
end
|
|
67
68
|
|
|
@@ -78,9 +79,9 @@ module Cable
|
|
|
78
79
|
puts ""
|
|
79
80
|
puts "Run rake db:migrate to complete setup.".color(:yellow)
|
|
80
81
|
puts ""
|
|
81
|
-
puts "To begin using Cable Menu and
|
|
82
|
+
puts "To begin using Cable Menu and Resources use:".color(:green)
|
|
82
83
|
puts "rails generate cable:menu MENU_NAME"
|
|
83
|
-
puts "rails generate cable:resource
|
|
84
|
+
puts "rails generate cable:resource RESOURCE_NAME field:type field:type ..."
|
|
84
85
|
puts ""
|
|
85
86
|
end
|
|
86
87
|
|
|
@@ -3,11 +3,12 @@ class Admin::<%= class_name %>sController < AdminController
|
|
|
3
3
|
# GET /pages
|
|
4
4
|
# GET /pages.xml
|
|
5
5
|
def index
|
|
6
|
-
@<%=
|
|
7
|
-
|
|
6
|
+
@<%= singular_table_name %>s = <%= class_name %>.roots
|
|
7
|
+
@admin_layout = "single"
|
|
8
|
+
<%= class_name %>.rebuild!
|
|
8
9
|
respond_to do |format|
|
|
9
10
|
format.html # index.html.erb
|
|
10
|
-
format.xml { render :xml => @<%=
|
|
11
|
+
format.xml { render :xml => @<%= singular_table_name %>s }
|
|
11
12
|
end
|
|
12
13
|
end
|
|
13
14
|
|
|
@@ -15,22 +16,24 @@ class Admin::<%= class_name %>sController < AdminController
|
|
|
15
16
|
# GET /pages/1.xml
|
|
16
17
|
def show
|
|
17
18
|
@<%= singular_table_name %> = <%= class_name %>.where( :id => params[:id]).first
|
|
18
|
-
@<%=
|
|
19
|
+
@<%= singular_table_name %>s = <%= class_name %>.roots
|
|
19
20
|
|
|
20
21
|
respond_to do |format|
|
|
21
22
|
format.html # show.html.erb
|
|
22
23
|
format.xml { render :xml => @<%= singular_table_name %> }
|
|
23
|
-
format.js { render :partial => "admin/
|
|
24
|
+
format.js { render :partial => "admin/<%= singular_table_name %>s/parents" }
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
# GET /pages/new
|
|
28
29
|
# GET /pages/new.xml
|
|
29
30
|
def new
|
|
30
|
-
@
|
|
31
|
+
@resource_types = Cable.resource_types.collect{|resource| ["#{resource.name}","#{resource.name.pluralize}"]}
|
|
32
|
+
@resources = @resource_types.first[0].classify.constantize.find(:all).sort{|x,y| x.title <=> y.title}
|
|
33
|
+
|
|
31
34
|
@<%= singular_table_name %> = <%= class_name %>.new
|
|
32
35
|
if params[:parent_id] && params[:parent_id] != "0"
|
|
33
|
-
@parent =
|
|
36
|
+
@parent = <%= class_name %>.find(params[:parent_id])
|
|
34
37
|
@<%= singular_table_name %>.parent_id = @parent.id
|
|
35
38
|
end
|
|
36
39
|
respond_to do |format|
|
|
@@ -41,15 +44,16 @@ class Admin::<%= class_name %>sController < AdminController
|
|
|
41
44
|
|
|
42
45
|
# GET /pages/1/edit
|
|
43
46
|
def edit
|
|
44
|
-
@<%= singular_table_name %> = <%= class_name %>.includes(:
|
|
45
|
-
@
|
|
47
|
+
@<%= singular_table_name %> = <%= class_name %>.includes(:cable_<%= singular_table_name %>able).where( :id => params[:id]).first
|
|
48
|
+
@resource_types = Cable.resource_types.collect{|resource| ["#{resource.name}","#{resource.name.pluralize}"]}
|
|
49
|
+
@resources = @<%= singular_table_name %>.cable_<%= singular_table_name %>able_type.classify.constantize.find(:all).sort{|x,y| x.title <=> y.title}
|
|
46
50
|
end
|
|
47
51
|
|
|
48
52
|
# POST /pages
|
|
49
53
|
# POST /pages.xml
|
|
50
54
|
def create
|
|
51
55
|
|
|
52
|
-
@<%= singular_table_name %> = <%= class_name %>.new(params[
|
|
56
|
+
@<%= singular_table_name %> = <%= class_name %>.new(params[:<%= singular_table_name %>])
|
|
53
57
|
|
|
54
58
|
respond_to do |format|
|
|
55
59
|
if @<%= singular_table_name %>.save
|
|
@@ -66,12 +70,12 @@ class Admin::<%= class_name %>sController < AdminController
|
|
|
66
70
|
# PUT /pages/1
|
|
67
71
|
# PUT /pages/1.xml
|
|
68
72
|
def update
|
|
69
|
-
@<%= singular_table_name %> = <%= class_name %>.includes(:
|
|
73
|
+
@<%= singular_table_name %> = <%= class_name %>.includes(:cable_<%= singular_table_name %>able).where( :id => params[:id]).first
|
|
70
74
|
|
|
71
|
-
params[
|
|
75
|
+
params[:<%= singular_table_name %>][:tree_id] = <%= class_name %>.find(params[:<%= singular_table_name %>][:parent_id]).tree_id unless params[:<%= singular_table_name %>][:parent_id].blank?
|
|
72
76
|
|
|
73
77
|
respond_to do |format|
|
|
74
|
-
if @<%= singular_table_name %>.update_attributes(params[
|
|
78
|
+
if @<%= singular_table_name %>.update_attributes(params[:<%= singular_table_name %>])
|
|
75
79
|
<%= class_name %>.rebuild!
|
|
76
80
|
format.html { redirect_to([:admin, @<%= singular_table_name %>], :notice => '<%= class_name %> was successfully updated.') }
|
|
77
81
|
format.xml { head :ok }
|
|
@@ -89,7 +93,7 @@ class Admin::<%= class_name %>sController < AdminController
|
|
|
89
93
|
@<%= singular_table_name %>.destroy
|
|
90
94
|
|
|
91
95
|
respond_to do |format|
|
|
92
|
-
format.html { redirect_to(
|
|
96
|
+
format.html { redirect_to(admin_<%= singular_table_name %>s_url) }
|
|
93
97
|
format.xml { head :ok }
|
|
94
98
|
end
|
|
95
99
|
end
|
|
@@ -98,39 +102,39 @@ class Admin::<%= class_name %>sController < AdminController
|
|
|
98
102
|
new_list = params[:ul]
|
|
99
103
|
previous = nil
|
|
100
104
|
new_list.each_with_index do |array, index|
|
|
101
|
-
moved_item_id = array[1][:id].split(/
|
|
102
|
-
@
|
|
105
|
+
moved_item_id = array[1][:id].split(/<%= singular_table_name %>_/)
|
|
106
|
+
@current_<%= singular_table_name %> = <%= class_name %>.find_by_id(moved_item_id)
|
|
103
107
|
unless previous.nil?
|
|
104
|
-
@previous_item =
|
|
105
|
-
@
|
|
108
|
+
@previous_item = <%= class_name %>.find_by_id(previous)
|
|
109
|
+
@current_<%= singular_table_name %>.move_to_right_of(@previous_item)
|
|
106
110
|
else
|
|
107
|
-
@
|
|
111
|
+
@current_<%= singular_table_name %>.move_to_root
|
|
108
112
|
end
|
|
109
113
|
unless array[1][:children].blank?
|
|
110
|
-
parse_children(array[1], @
|
|
114
|
+
parse_children(array[1], @current_<%= singular_table_name %>)
|
|
111
115
|
end
|
|
112
116
|
previous = moved_item_id
|
|
113
117
|
end
|
|
114
|
-
|
|
118
|
+
<%= class_name %>.rebuild!
|
|
115
119
|
render :nothing => true
|
|
116
120
|
end
|
|
117
121
|
|
|
118
|
-
def parse_children(mynode,
|
|
122
|
+
def parse_children(mynode, <%= singular_table_name %>)
|
|
119
123
|
for child in mynode[:children]
|
|
120
|
-
child_id = child[1][:id].split(/
|
|
121
|
-
|
|
122
|
-
|
|
124
|
+
child_id = child[1][:id].split(/<%= singular_table_name %>_/)
|
|
125
|
+
child_<%= singular_table_name %> = <%= class_name %>.find_by_id(child_id)
|
|
126
|
+
child_<%= singular_table_name %>.move_to_child_of(<%= singular_table_name %>)
|
|
123
127
|
unless child[1][:children].blank?
|
|
124
|
-
parse_children(child[1],
|
|
128
|
+
parse_children(child[1], child_<%= singular_table_name %>)
|
|
125
129
|
end
|
|
126
130
|
end
|
|
127
131
|
end
|
|
128
132
|
|
|
129
133
|
def resources
|
|
130
134
|
resource_type = params[:resource]
|
|
131
|
-
@resources = "#{resource_type}".classify.constantize.find(:all)
|
|
132
|
-
|
|
133
|
-
|
|
135
|
+
@resources = "#{resource_type}".classify.constantize.find(:all).sort{|x,y| x.title <=> y.title}
|
|
136
|
+
respond_to do |format|
|
|
137
|
+
format.js
|
|
134
138
|
end
|
|
135
139
|
end
|
|
136
|
-
end
|
|
140
|
+
end
|
|
@@ -1,7 +1,35 @@
|
|
|
1
|
+
<%%= javascript_include_tag 'jquery.quicksearch.js' %>
|
|
2
|
+
<script>
|
|
3
|
+
$(document).ready(function(){
|
|
4
|
+
$(".tabs").tabs();
|
|
5
|
+
$("#types li").click(function(){
|
|
6
|
+
$("#types .selected").removeClass();
|
|
7
|
+
resource_type = $(this).attr("id").replace("type_", "");
|
|
8
|
+
$(this).addClass("selected");
|
|
9
|
+
update_resources(resource_type);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
function update_fields(id,type){
|
|
13
|
+
$("#<%= singular_table_name %>_cable_menuable_type").val(type);
|
|
14
|
+
$("#<%= singular_table_name %>_cable_menuable_id").val(id);
|
|
15
|
+
}
|
|
16
|
+
function update_resources(resource_type){
|
|
17
|
+
$.ajax({
|
|
18
|
+
type: 'POST',
|
|
19
|
+
url: "/admin/<%= singular_table_name %>s/resources",
|
|
20
|
+
data: {resource : resource_type},
|
|
21
|
+
success: function(){
|
|
22
|
+
console.log("Done");
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
|
|
1
28
|
<%%= semantic_form_for [:admin, @<%= singular_table_name %>] do |f| %>
|
|
29
|
+
|
|
2
30
|
<%% if @<%= singular_table_name %>.errors.any? %>
|
|
3
31
|
<div id="error_explanation">
|
|
4
|
-
<h3><%%= pluralize(@<%= singular_table_name %>.errors.count, "error") %> prohibited this
|
|
32
|
+
<h3><%%= pluralize(@<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h3>
|
|
5
33
|
<ul>
|
|
6
34
|
<%% @<%= singular_table_name %>.errors.full_messages.each do |msg| %>
|
|
7
35
|
<li><%%= msg %></li>
|
|
@@ -9,24 +37,67 @@
|
|
|
9
37
|
</ul>
|
|
10
38
|
</div>
|
|
11
39
|
<%% end %>
|
|
12
|
-
<%%= f.inputs "Menu Properties" do %>
|
|
13
|
-
<%%= f.input :title, :label => "Menu Title", :hint => "This will be used in the menu itself" %>
|
|
14
|
-
<%%= f.input :meta_description, :label => "Meta Description", :hint => "Meta Description rendered in the head of the document" %>
|
|
15
|
-
<%%= f.input :meta_keywords, :label => "Meta Keywords", :hint => "Enter Keywords with a comma separating each key" %>
|
|
16
|
-
<%%= f.input :url, :label => "URL", :as => :string, :hint => "URL for this menu item, Example: /categories/canopies" %>
|
|
17
|
-
<%%= f.input :show_in_menu, :as => :boolean, :wrapper_html => { :class => "yes_no" }, :hint => "You can hide the menu item by unchecking this box." %>
|
|
18
|
-
<%% end %>
|
|
19
|
-
<%%= f.inputs "Template and Resource" do %>
|
|
20
|
-
<%% unless Cable.special_actions.empty? %>
|
|
21
|
-
<%%= f.input :special_action, :label => "Special Action", :as => :select, :collection => Cable.special_actions, :hint => "(Optional)" %>
|
|
22
|
-
<%% end %>
|
|
23
|
-
<%% unless Cable.templates.empty? %>
|
|
24
|
-
<%%= f.input :template, :as => :select, :collection => Cable.templates, :selected => f.object.template || "default", :hint => "Which page template should be used?"%>
|
|
25
|
-
<%% end %>
|
|
26
|
-
<%% unless @resources.nil? %>
|
|
27
|
-
<%%= f.input :cable_menuable_id, :label => "Resource", :as => :select, :include_blank => true, :collection => @resources %>
|
|
28
|
-
<%% end %>
|
|
29
|
-
<%% end %>
|
|
30
40
|
|
|
41
|
+
<div class="tabs">
|
|
42
|
+
<ul>
|
|
43
|
+
<li><a href="#tabs-1">Menu Properties</a></li>
|
|
44
|
+
<li><a href="#tabs-2">Template and Special Actions</a></li>
|
|
45
|
+
<li><a href="#tabs-3">Resource</a></li>
|
|
46
|
+
</ul>
|
|
47
|
+
<div id="tabs-1">
|
|
48
|
+
<%%= f.inputs do %>
|
|
49
|
+
<%%= f.input :title, :label => "Menu Title", :hint => "This will be used in the <%= singular_table_name %> itself" %>
|
|
50
|
+
<%%= f.input :meta_description, :label => "Meta Description", :hint => "Meta Description rendered in the head of the document" %>
|
|
51
|
+
<%%= f.input :meta_keywords, :label => "Meta Keywords", :hint => "Enter Keywords with a comma separating each key" %>
|
|
52
|
+
<%%= f.input :url, :label => "URL", :as => :string, :hint => "URL for this <%= singular_table_name %> item, Example: /categories/canopies" %>
|
|
53
|
+
<%%= f.input :show_in_<%= singular_table_name %>, :as => :boolean, :wrapper_html => { :class => "yes_no" }, :hint => "You can hide the <%= singular_table_name %> item by unchecking this box." %>
|
|
54
|
+
<%% end %>
|
|
55
|
+
</div>
|
|
56
|
+
<div id="tabs-2">
|
|
57
|
+
<%%= f.inputs do %>
|
|
58
|
+
<%% unless Cable.special_actions.empty? %>
|
|
59
|
+
<%%= f.input :special_action, :label => "Special Action", :as => :select, :collection => Cable.special_actions, :hint => "(Optional)" %>
|
|
60
|
+
<%% end %>
|
|
61
|
+
<%% unless Cable.templates.empty? %>
|
|
62
|
+
<%%= f.input :template, :as => :select, :collection => Cable.templates, :selected => f.object.template || "default", :hint => "Which page template should be used?"%>
|
|
63
|
+
<%% end %>
|
|
64
|
+
<%% end %>
|
|
65
|
+
</div>
|
|
66
|
+
<div id="tabs-3">
|
|
67
|
+
<%%= f.inputs do %>
|
|
68
|
+
<%%= f.input :cable_menuable_type, :as => :hidden %>
|
|
69
|
+
<%%= f.input :cable_menuable_id, :as => :hidden %>
|
|
70
|
+
<li><div id="selected-resource"><%%= @<%= singular_table_name %>.cable_menuable_type %> » <%%= @<%= singular_table_name %>.resource.title unless @<%= singular_table_name %>.resource.nil? %></div></li>
|
|
71
|
+
<li>
|
|
72
|
+
<table id="resources">
|
|
73
|
+
<thead>
|
|
74
|
+
<tr>
|
|
75
|
+
<th>Type</th>
|
|
76
|
+
<th>Resources <input type="text" name="search" value="" id="search_resources" placeholder="Search" /> </th>
|
|
77
|
+
</tr>
|
|
78
|
+
</thead>
|
|
79
|
+
<tbody>
|
|
80
|
+
<tr>
|
|
81
|
+
<td id="types">
|
|
82
|
+
<ul>
|
|
83
|
+
<%% @resource_types.each do |type| %>
|
|
84
|
+
<li id="type_<%%= type[0] %>"><%%= type[1] %></li>
|
|
85
|
+
<%% end %>
|
|
86
|
+
</ul>
|
|
87
|
+
</td>
|
|
88
|
+
<td id="resources-data">
|
|
89
|
+
<div>
|
|
90
|
+
<%%= render(:partial => "admin/<%= singular_table_name %>s/resources", :locals => {:resources => @resources})%>
|
|
91
|
+
</div>
|
|
92
|
+
</td>
|
|
93
|
+
</tr>
|
|
94
|
+
</tbody>
|
|
95
|
+
</table>
|
|
96
|
+
</li>
|
|
97
|
+
<%% end %>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
31
101
|
<%%= f.buttons %>
|
|
102
|
+
|
|
32
103
|
<%% end %>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<table id="resources-table">
|
|
2
|
+
<tbody>
|
|
3
|
+
<%% @resources.each do |resource| %>
|
|
4
|
+
<tr>
|
|
5
|
+
<td menu_id="<%%= resource.id %>" resource_type="<%%= resource.class.name %>" class="resource"><%%= resource.title %></td>
|
|
6
|
+
<td><%%= link_to image_tag("cable/search.png"), [:admin, resource], :target => "_blank" %></td>
|
|
7
|
+
</tr>
|
|
8
|
+
<%% end %>
|
|
9
|
+
</tbody>
|
|
10
|
+
</table>
|
|
11
|
+
<script>
|
|
12
|
+
$('input#search_resources').quicksearch('#resources-data tr');
|
|
13
|
+
$("#resources-data td.resource").click(function(){
|
|
14
|
+
$("#resources-data .selected").removeClass();
|
|
15
|
+
$("#selected-resource").html($(this).attr("resource_type")+" » "+$(this).text());
|
|
16
|
+
$(this).parent().addClass("selected");
|
|
17
|
+
menu_id = $(this).attr("menu_id");
|
|
18
|
+
resource_type = $(this).attr("resource_type");
|
|
19
|
+
update_fields(menu_id, resource_type);
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$("#resources-data div").html('<%%= escape_javascript(render(:partial => "admin/menus/resources")) %>');
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<tbody>
|
|
6
6
|
<tr>
|
|
7
7
|
<th>URL:</th>
|
|
8
|
-
<td><%%= link_to "#{@<%= singular_table_name %>.url}", @<%= singular_table_name %>.url
|
|
8
|
+
<td><%%= link_to "#{@<%= singular_table_name %>.url}", @<%= singular_table_name %>.url %> <%%= link_to image_tag('/images/cable/new-window.png'), @<%= singular_table_name %>.url, :target => "_blank" %> </td>
|
|
9
9
|
|
|
10
10
|
</tr>
|
|
11
11
|
<%% unless @<%= singular_table_name %>.resource.nil? %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
location.reload(true);
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
function save_tree(){
|
|
39
|
+
|
|
39
40
|
$(".cable_menu_wrapper li").each(function() {
|
|
40
41
|
$li = $(this);
|
|
41
42
|
$ul = $("ul[menu="+$li.attr("menu")+"]");
|
|
@@ -48,7 +49,10 @@
|
|
|
48
49
|
$('.cable_menu_wrapper > ul').removeAttr("id");
|
|
49
50
|
|
|
50
51
|
var the_menu = $('.cable_menu_wrapper > ul').serialize_list();
|
|
51
|
-
|
|
52
|
+
$('.cable_menu_wrapper').html("Saving ...");
|
|
53
|
+
$.post("/admin/menus/sort", the_menu, function(){
|
|
54
|
+
location.reload(true);
|
|
55
|
+
});
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
function show_add_menu(item){
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
(function($, window, document, undefined) {
|
|
2
|
+
$.fn.quicksearch = function (target, opt) {
|
|
3
|
+
|
|
4
|
+
var timeout, cache, rowcache, jq_results, val = '', e = this, options = $.extend({
|
|
5
|
+
delay: 100,
|
|
6
|
+
selector: null,
|
|
7
|
+
stripeRows: null,
|
|
8
|
+
loader: null,
|
|
9
|
+
noResults: '',
|
|
10
|
+
bind: 'keyup',
|
|
11
|
+
onBefore: function () {
|
|
12
|
+
return;
|
|
13
|
+
},
|
|
14
|
+
onAfter: function () {
|
|
15
|
+
return;
|
|
16
|
+
},
|
|
17
|
+
show: function () {
|
|
18
|
+
this.style.display = "";
|
|
19
|
+
},
|
|
20
|
+
hide: function () {
|
|
21
|
+
this.style.display = "none";
|
|
22
|
+
},
|
|
23
|
+
prepareQuery: function (val) {
|
|
24
|
+
return val.toLowerCase().split(' ');
|
|
25
|
+
},
|
|
26
|
+
testQuery: function (query, txt, _row) {
|
|
27
|
+
for (var i = 0; i < query.length; i += 1) {
|
|
28
|
+
if (txt.indexOf(query[i]) === -1) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}, opt);
|
|
35
|
+
|
|
36
|
+
this.go = function () {
|
|
37
|
+
|
|
38
|
+
var i = 0,
|
|
39
|
+
noresults = true,
|
|
40
|
+
query = options.prepareQuery(val),
|
|
41
|
+
val_empty = (val.replace(' ', '').length === 0);
|
|
42
|
+
|
|
43
|
+
for (var i = 0, len = rowcache.length; i < len; i++) {
|
|
44
|
+
if (val_empty || options.testQuery(query, cache[i], rowcache[i])) {
|
|
45
|
+
options.show.apply(rowcache[i]);
|
|
46
|
+
noresults = false;
|
|
47
|
+
} else {
|
|
48
|
+
options.hide.apply(rowcache[i]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (noresults) {
|
|
53
|
+
this.results(false);
|
|
54
|
+
} else {
|
|
55
|
+
this.results(true);
|
|
56
|
+
this.stripe();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
this.loader(false);
|
|
60
|
+
options.onAfter();
|
|
61
|
+
|
|
62
|
+
return this;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
this.stripe = function () {
|
|
66
|
+
|
|
67
|
+
if (typeof options.stripeRows === "object" && options.stripeRows !== null)
|
|
68
|
+
{
|
|
69
|
+
var joined = options.stripeRows.join(' ');
|
|
70
|
+
var stripeRows_length = options.stripeRows.length;
|
|
71
|
+
|
|
72
|
+
jq_results.not(':hidden').each(function (i) {
|
|
73
|
+
$(this).removeClass(joined).addClass(options.stripeRows[i % stripeRows_length]);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return this;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
this.strip_html = function (input) {
|
|
81
|
+
var output = input.replace(new RegExp('<[^<]+\>', 'g'), "");
|
|
82
|
+
output = $.trim(output.toLowerCase());
|
|
83
|
+
return output;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
this.results = function (bool) {
|
|
87
|
+
if (typeof options.noResults === "string" && options.noResults !== "") {
|
|
88
|
+
if (bool) {
|
|
89
|
+
$(options.noResults).hide();
|
|
90
|
+
} else {
|
|
91
|
+
$(options.noResults).show();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return this;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
this.loader = function (bool) {
|
|
98
|
+
if (typeof options.loader === "string" && options.loader !== "") {
|
|
99
|
+
(bool) ? $(options.loader).show() : $(options.loader).hide();
|
|
100
|
+
}
|
|
101
|
+
return this;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
this.cache = function () {
|
|
105
|
+
|
|
106
|
+
jq_results = $(target);
|
|
107
|
+
|
|
108
|
+
if (typeof options.noResults === "string" && options.noResults !== "") {
|
|
109
|
+
jq_results = jq_results.not(options.noResults);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
var t = (typeof options.selector === "string") ? jq_results.find(options.selector) : $(target).not(options.noResults);
|
|
113
|
+
cache = t.map(function () {
|
|
114
|
+
return e.strip_html(this.innerHTML);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
rowcache = jq_results.map(function () {
|
|
118
|
+
return this;
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
return this.go();
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
this.trigger = function () {
|
|
125
|
+
this.loader(true);
|
|
126
|
+
options.onBefore();
|
|
127
|
+
|
|
128
|
+
window.clearTimeout(timeout);
|
|
129
|
+
timeout = window.setTimeout(function () {
|
|
130
|
+
e.go();
|
|
131
|
+
}, options.delay);
|
|
132
|
+
|
|
133
|
+
return this;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
this.cache();
|
|
137
|
+
this.results(true);
|
|
138
|
+
this.stripe();
|
|
139
|
+
this.loader(false);
|
|
140
|
+
|
|
141
|
+
return this.each(function () {
|
|
142
|
+
$(this).bind(options.bind, function () {
|
|
143
|
+
val = $(this).val();
|
|
144
|
+
e.trigger();
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
}(jQuery, this, document));
|
|
@@ -26,12 +26,18 @@ ul.cable_menu ul {
|
|
|
26
26
|
width: 129px;
|
|
27
27
|
padding: 4px 20px 4px 4px;
|
|
28
28
|
}
|
|
29
|
+
#resources-table tr:hover,
|
|
30
|
+
#types li:hover,
|
|
29
31
|
.cable_menu_wrapper li:hover{
|
|
30
32
|
background-color: #f4f4f4;
|
|
31
33
|
cursor: pointer;
|
|
32
34
|
}
|
|
33
|
-
.cable_menu_wrapper li
|
|
35
|
+
.cable_menu_wrapper li{
|
|
34
36
|
width: 145px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#types li,
|
|
40
|
+
.cable_menu_wrapper li {
|
|
35
41
|
padding: 4px 4px 4px 4px;
|
|
36
42
|
white-space: nowrap;
|
|
37
43
|
list-style: none;
|
|
@@ -60,8 +66,10 @@ ul.cable_menu ul {
|
|
|
60
66
|
display:inline-block;
|
|
61
67
|
}
|
|
62
68
|
|
|
69
|
+
#resources-table tr.selected td,
|
|
63
70
|
.cable_menu_wrapper li.selected.last,
|
|
64
|
-
.cable_menu_wrapper li.selected.last.has-children
|
|
71
|
+
.cable_menu_wrapper li.selected.last.has-children,
|
|
72
|
+
#types li.selected{
|
|
65
73
|
background-color: #2494fc;
|
|
66
74
|
color: white;
|
|
67
75
|
}
|
|
@@ -101,34 +109,53 @@ ul.cable_menu ul {
|
|
|
101
109
|
#add-menu:hover{
|
|
102
110
|
background-color:#ddd;
|
|
103
111
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
112
|
+
ul.cable_menu.empty{
|
|
113
|
+
background:url(/images/cable/empty-menu.png);
|
|
114
|
+
}
|
|
115
|
+
#save-tree{
|
|
116
|
+
margin-bottom:1em;
|
|
107
117
|
}
|
|
108
118
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
border-bottom-left-radius: 4px 4px;
|
|
112
|
-
border-bottom-right-radius: 4px 4px;
|
|
113
|
-
border-top-left-radius: 4px 4px;
|
|
114
|
-
border-top-right-radius: 4px 4px;
|
|
119
|
+
#resources-data {
|
|
120
|
+
padding: 0;
|
|
115
121
|
}
|
|
116
122
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
#search_resources{
|
|
131
|
+
float: right;
|
|
132
|
+
display: block;
|
|
133
|
+
font-weight: normal;
|
|
122
134
|
}
|
|
123
135
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
-webkit-border-radius: 4px;
|
|
136
|
+
#selected-resource {
|
|
137
|
+
font-size: 1.25em;
|
|
138
|
+
font-weight: bold;
|
|
128
139
|
}
|
|
129
|
-
|
|
130
|
-
|
|
140
|
+
#types {
|
|
141
|
+
vertical-align: top;
|
|
142
|
+
width: 200px;
|
|
143
|
+
padding: 0;
|
|
131
144
|
}
|
|
132
|
-
|
|
133
|
-
|
|
145
|
+
|
|
146
|
+
#resources-table tbody .resource{
|
|
147
|
+
width: 300px;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
#types li{
|
|
151
|
+
display: block;
|
|
152
|
+
font-size: 1.25em;
|
|
153
|
+
padding: .25em;
|
|
154
|
+
border: 1px solid white;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
#resources-table tbody {
|
|
158
|
+
height:300px;
|
|
159
|
+
display: block;
|
|
160
|
+
overflow:auto;
|
|
134
161
|
}
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
h2{
|
|
127
127
|
font-size: 1.5em;
|
|
128
128
|
display: block;
|
|
129
|
-
|
|
129
|
+
/* float: left;*/
|
|
130
130
|
}
|
|
131
131
|
h3{
|
|
132
132
|
font-size: 1.25em;
|
|
@@ -247,4 +247,6 @@ h3{
|
|
|
247
247
|
padding: 1em;
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
+
#right-col {margin-bottom:80px;}
|
|
251
|
+
|
|
250
252
|
/* @end */
|
metadata
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash: 47
|
|
5
4
|
prerelease:
|
|
6
|
-
|
|
7
|
-
- 0
|
|
8
|
-
- 9
|
|
9
|
-
- 10
|
|
10
|
-
version: 0.9.10
|
|
5
|
+
version: 0.9.11
|
|
11
6
|
platform: ruby
|
|
12
7
|
authors:
|
|
13
8
|
- Spencer Markowski
|
|
@@ -17,137 +12,108 @@ autorequire:
|
|
|
17
12
|
bindir: bin
|
|
18
13
|
cert_chain: []
|
|
19
14
|
|
|
20
|
-
date: 2011-04-
|
|
15
|
+
date: 2011-04-10 00:00:00 -04:00
|
|
21
16
|
default_executable:
|
|
22
17
|
dependencies:
|
|
23
18
|
- !ruby/object:Gem::Dependency
|
|
24
|
-
|
|
19
|
+
name: rails
|
|
25
20
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
26
21
|
none: false
|
|
27
22
|
requirements:
|
|
28
23
|
- - ~>
|
|
29
24
|
- !ruby/object:Gem::Version
|
|
30
|
-
hash: 7
|
|
31
|
-
segments:
|
|
32
|
-
- 3
|
|
33
|
-
- 0
|
|
34
|
-
- 0
|
|
35
25
|
version: 3.0.0
|
|
36
|
-
|
|
37
|
-
version_requirements: *id001
|
|
26
|
+
type: :runtime
|
|
38
27
|
prerelease: false
|
|
28
|
+
version_requirements: *id001
|
|
39
29
|
- !ruby/object:Gem::Dependency
|
|
40
|
-
|
|
30
|
+
name: orm_adapter
|
|
41
31
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
42
32
|
none: false
|
|
43
33
|
requirements:
|
|
44
34
|
- - ">="
|
|
45
35
|
- !ruby/object:Gem::Version
|
|
46
|
-
hash: 3
|
|
47
|
-
segments:
|
|
48
|
-
- 0
|
|
49
36
|
version: "0"
|
|
50
|
-
|
|
51
|
-
version_requirements: *id002
|
|
37
|
+
type: :runtime
|
|
52
38
|
prerelease: false
|
|
39
|
+
version_requirements: *id002
|
|
53
40
|
- !ruby/object:Gem::Dependency
|
|
54
|
-
|
|
41
|
+
name: awesome_nested_set
|
|
55
42
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
56
43
|
none: false
|
|
57
44
|
requirements:
|
|
58
45
|
- - ">="
|
|
59
46
|
- !ruby/object:Gem::Version
|
|
60
|
-
hash: 3
|
|
61
|
-
segments:
|
|
62
|
-
- 0
|
|
63
47
|
version: "0"
|
|
64
|
-
|
|
65
|
-
version_requirements: *id003
|
|
48
|
+
type: :runtime
|
|
66
49
|
prerelease: false
|
|
50
|
+
version_requirements: *id003
|
|
67
51
|
- !ruby/object:Gem::Dependency
|
|
68
|
-
|
|
52
|
+
name: formtastic
|
|
69
53
|
requirement: &id004 !ruby/object:Gem::Requirement
|
|
70
54
|
none: false
|
|
71
55
|
requirements:
|
|
72
56
|
- - ">="
|
|
73
57
|
- !ruby/object:Gem::Version
|
|
74
|
-
hash: 3
|
|
75
|
-
segments:
|
|
76
|
-
- 0
|
|
77
58
|
version: "0"
|
|
78
|
-
|
|
79
|
-
version_requirements: *id004
|
|
59
|
+
type: :runtime
|
|
80
60
|
prerelease: false
|
|
61
|
+
version_requirements: *id004
|
|
81
62
|
- !ruby/object:Gem::Dependency
|
|
82
|
-
|
|
63
|
+
name: simple-navigation
|
|
83
64
|
requirement: &id005 !ruby/object:Gem::Requirement
|
|
84
65
|
none: false
|
|
85
66
|
requirements:
|
|
86
67
|
- - ">="
|
|
87
68
|
- !ruby/object:Gem::Version
|
|
88
|
-
hash: 3
|
|
89
|
-
segments:
|
|
90
|
-
- 0
|
|
91
69
|
version: "0"
|
|
92
|
-
|
|
93
|
-
version_requirements: *id005
|
|
70
|
+
type: :runtime
|
|
94
71
|
prerelease: false
|
|
72
|
+
version_requirements: *id005
|
|
95
73
|
- !ruby/object:Gem::Dependency
|
|
96
|
-
|
|
74
|
+
name: jquery-rails
|
|
97
75
|
requirement: &id006 !ruby/object:Gem::Requirement
|
|
98
76
|
none: false
|
|
99
77
|
requirements:
|
|
100
78
|
- - ">="
|
|
101
79
|
- !ruby/object:Gem::Version
|
|
102
|
-
hash: 3
|
|
103
|
-
segments:
|
|
104
|
-
- 0
|
|
105
80
|
version: "0"
|
|
106
|
-
|
|
107
|
-
version_requirements: *id006
|
|
81
|
+
type: :runtime
|
|
108
82
|
prerelease: false
|
|
83
|
+
version_requirements: *id006
|
|
109
84
|
- !ruby/object:Gem::Dependency
|
|
110
|
-
|
|
85
|
+
name: rainbow
|
|
111
86
|
requirement: &id007 !ruby/object:Gem::Requirement
|
|
112
87
|
none: false
|
|
113
88
|
requirements:
|
|
114
89
|
- - ">="
|
|
115
90
|
- !ruby/object:Gem::Version
|
|
116
|
-
hash: 3
|
|
117
|
-
segments:
|
|
118
|
-
- 0
|
|
119
91
|
version: "0"
|
|
120
|
-
|
|
121
|
-
version_requirements: *id007
|
|
92
|
+
type: :runtime
|
|
122
93
|
prerelease: false
|
|
94
|
+
version_requirements: *id007
|
|
123
95
|
- !ruby/object:Gem::Dependency
|
|
124
|
-
|
|
96
|
+
name: kaminari
|
|
125
97
|
requirement: &id008 !ruby/object:Gem::Requirement
|
|
126
98
|
none: false
|
|
127
99
|
requirements:
|
|
128
100
|
- - ">="
|
|
129
101
|
- !ruby/object:Gem::Version
|
|
130
|
-
hash: 3
|
|
131
|
-
segments:
|
|
132
|
-
- 0
|
|
133
102
|
version: "0"
|
|
134
|
-
|
|
135
|
-
version_requirements: *id008
|
|
103
|
+
type: :runtime
|
|
136
104
|
prerelease: false
|
|
105
|
+
version_requirements: *id008
|
|
137
106
|
- !ruby/object:Gem::Dependency
|
|
138
|
-
|
|
107
|
+
name: cocoon
|
|
139
108
|
requirement: &id009 !ruby/object:Gem::Requirement
|
|
140
109
|
none: false
|
|
141
110
|
requirements:
|
|
142
111
|
- - ">="
|
|
143
112
|
- !ruby/object:Gem::Version
|
|
144
|
-
hash: 3
|
|
145
|
-
segments:
|
|
146
|
-
- 0
|
|
147
113
|
version: "0"
|
|
148
|
-
|
|
149
|
-
version_requirements: *id009
|
|
114
|
+
type: :runtime
|
|
150
115
|
prerelease: false
|
|
116
|
+
version_requirements: *id009
|
|
151
117
|
description:
|
|
152
118
|
email:
|
|
153
119
|
executables: []
|
|
@@ -185,6 +151,8 @@ files:
|
|
|
185
151
|
- app/views/layouts/_messages.html.erb
|
|
186
152
|
- app/views/layouts/_search.html.erb
|
|
187
153
|
- app/views/layouts/admin.html.erb
|
|
154
|
+
- app/views/layouts/admin/_dual_column_layout.html.erb
|
|
155
|
+
- app/views/layouts/admin/_single_column_layout.html.erb
|
|
188
156
|
- config/admin_navigation.rb
|
|
189
157
|
- config/navigation.rb
|
|
190
158
|
- config/routes.rb
|
|
@@ -218,10 +186,13 @@ files:
|
|
|
218
186
|
- lib/generators/cable/menu/menu_generator.rb
|
|
219
187
|
- lib/generators/cable/menu/templates/controller.rb
|
|
220
188
|
- lib/generators/cable/menu/templates/erb/menus/_menu.html.erb
|
|
189
|
+
- lib/generators/cable/menu/templates/erb/menus/_resources.html.erb
|
|
221
190
|
- lib/generators/cable/menu/templates/erb/menus/edit.html.erb
|
|
222
191
|
- lib/generators/cable/menu/templates/erb/menus/index.html.erb
|
|
223
192
|
- lib/generators/cable/menu/templates/erb/menus/new.html.erb
|
|
193
|
+
- lib/generators/cable/menu/templates/erb/menus/resources.js.erb
|
|
224
194
|
- lib/generators/cable/menu/templates/erb/menus/show.html.erb
|
|
195
|
+
- lib/generators/cable/menu/templates/erb/menus/sort.js.erb
|
|
225
196
|
- lib/generators/cable/menu/templates/erb/partials/_menu_fields.html.erb
|
|
226
197
|
- lib/generators/cable/menu/templates/migration.rb
|
|
227
198
|
- lib/generators/cable/menu/templates/model.rb
|
|
@@ -262,6 +233,7 @@ files:
|
|
|
262
233
|
- public/images/cable/story-icon.jpg
|
|
263
234
|
- public/javascripts/admin.js
|
|
264
235
|
- public/javascripts/cable_menu.js
|
|
236
|
+
- public/javascripts/jquery.quicksearch.js
|
|
265
237
|
- public/javascripts/jquery.tablesorter.min.js
|
|
266
238
|
- public/javascripts/jquery.tagsinput.js
|
|
267
239
|
- public/javascripts/jquery.ui.autocomplete.html.js
|
|
@@ -577,18 +549,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
577
549
|
requirements:
|
|
578
550
|
- - ">="
|
|
579
551
|
- !ruby/object:Gem::Version
|
|
580
|
-
hash: 3
|
|
581
|
-
segments:
|
|
582
|
-
- 0
|
|
583
552
|
version: "0"
|
|
584
553
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
585
554
|
none: false
|
|
586
555
|
requirements:
|
|
587
556
|
- - ">="
|
|
588
557
|
- !ruby/object:Gem::Version
|
|
589
|
-
hash: 3
|
|
590
|
-
segments:
|
|
591
|
-
- 0
|
|
592
558
|
version: "0"
|
|
593
559
|
requirements: []
|
|
594
560
|
|