rails_admin-treeview 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +47 -0
- data/Rakefile +2 -0
- data/app/helpers/rails_admin_treeview_helper.rb +41 -0
- data/app/views/layouts/rails_admin/_navigation.html.haml +20 -0
- data/lib/generators/rails_admin/treeview_generator.rb +15 -0
- data/lib/rails_admin-treeview.rb +14 -0
- data/lib/rails_admin-treeview/config/model.rb +9 -0
- data/lib/rails_admin-treeview/version.rb +5 -0
- data/rails_admin-treeview.gemspec +18 -0
- data/vendor/assets/images/jquery_treeview/ajax-loader.gif +0 -0
- data/vendor/assets/images/jquery_treeview/file.gif +0 -0
- data/vendor/assets/images/jquery_treeview/folder-closed.gif +0 -0
- data/vendor/assets/images/jquery_treeview/folder.gif +0 -0
- data/vendor/assets/images/jquery_treeview/minus.gif +0 -0
- data/vendor/assets/images/jquery_treeview/plus.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-black-line.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-black.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-default-line.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-default.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-famfamfam-line.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-famfamfam.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-gray-line.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-gray.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-red-line.gif +0 -0
- data/vendor/assets/images/jquery_treeview/treeview-red.gif +0 -0
- data/vendor/assets/javascripts/jquery.treeview.js +256 -0
- data/vendor/assets/stylesheets/jquery.treeview.css +74 -0
- metadata +86 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Nick Recobra
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# RailsAdmin::Treeview
|
2
|
+
|
3
|
+
Tree-style navigation for RailsAdmin.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'rails_admin-treeview'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Be sure to have [rails_admin](https://github.com/sferik/rails_admin) gem installed.
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
Configure your model to use Treeview in rails_admin.rb:
|
20
|
+
|
21
|
+
RailsAdmin.config do |config|
|
22
|
+
config.model Category do
|
23
|
+
treeview true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Note that your model should implement these methods to use Treeview:
|
28
|
+
* `roots` class method that returns all root elements;
|
29
|
+
* `children` instance method that returns all of the object's child items.
|
30
|
+
|
31
|
+
Tree could be rendered expanded or collapsed. In order to be able to
|
32
|
+
change this, copy and edit
|
33
|
+
`app/views/layouts/rails_admin/_navigation.html.haml` by running a
|
34
|
+
generator:
|
35
|
+
|
36
|
+
rails g rails_admin:treeview
|
37
|
+
|
38
|
+
Now you could pass true of false to the `treeview` helper to render tree
|
39
|
+
expanded or collapsed.
|
40
|
+
|
41
|
+
## Contributing
|
42
|
+
|
43
|
+
1. Fork it
|
44
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
45
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
46
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
47
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module RailsAdminTreeviewHelper
|
3
|
+
def treeview open = false
|
4
|
+
if @model_config && @model_config.treeview
|
5
|
+
raise "Your #{@abstract_model.model} model must implement `roots` class method and `children` instance method to use treeview." if
|
6
|
+
!@abstract_model.model.respond_to?(:roots) || !@abstract_model.model.public_instance_methods.include?("children")
|
7
|
+
res = ''
|
8
|
+
res << javascript_include_tag("jquery.treeview.js")
|
9
|
+
res << stylesheet_link_tag("jquery.treeview.css")
|
10
|
+
res << "<hr>"
|
11
|
+
res << "<h3>%s</h3>" % @model_config.label_plural
|
12
|
+
res << (content_tag :ul, :id => "treeview" do
|
13
|
+
@abstract_model.model.roots.map do |root|
|
14
|
+
treeview_draw(root, open)
|
15
|
+
end.join.html_safe
|
16
|
+
end)
|
17
|
+
res << javascript_tag('$(document).ready(function(){$("#treeview").treeview({persist: "location"});});')
|
18
|
+
res.html_safe
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def treeview_draw node, open
|
23
|
+
content_tag :li, :class => open ? nil : "closed" do
|
24
|
+
res = ''
|
25
|
+
name = RailsAdmin.config(node.class).with(:object => node).object_label
|
26
|
+
res << content_tag(:span, link_to_unless_current(name, { :action => "edit",
|
27
|
+
:id => node.id,
|
28
|
+
:host => request.host,
|
29
|
+
:port => request.port == 80 ? nil : request.port,
|
30
|
+
:protocol => request.scheme }))
|
31
|
+
if node.children.size > 0
|
32
|
+
res << (content_tag :ul do
|
33
|
+
node.children.map do |child|
|
34
|
+
treeview_draw(child, open)
|
35
|
+
end.join.html_safe
|
36
|
+
end)
|
37
|
+
end
|
38
|
+
res.html_safe
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
- models = RailsAdmin::Config.visible_models.select { |model| authorized?(:index, model.abstract_model) }
|
2
|
+
- root_models = models.select { |model| model.parent == :root }
|
3
|
+
|
4
|
+
%ul#nav.navigation
|
5
|
+
%li{:class => ("active" if @page_type == "dashboard")}
|
6
|
+
= link_to(t("admin.dashboard.name"), dashboard_path)
|
7
|
+
- root_models.each do |model|
|
8
|
+
- children = [model] + models.select { |m| m.parent.to_s == model.abstract_model.model.to_s }
|
9
|
+
- tab_titles = children.map { |child| child.abstract_model.pretty_name.downcase }
|
10
|
+
- active = tab_titles.include? @page_type
|
11
|
+
%li{:class => "#{"active" if active} #{"more" unless children.empty?}"}
|
12
|
+
- if children.size == 1
|
13
|
+
= link_to(model.label_plural, index_path(:model_name => model.abstract_model.to_param))
|
14
|
+
- else
|
15
|
+
= model.navigation_label ? t(model.navigation_label, :default => model.navigation_label) : model.label_plural
|
16
|
+
%ul
|
17
|
+
- children.each_with_index do |child, index|
|
18
|
+
%li{:class => ("active" if @page_type == tab_titles[index])}
|
19
|
+
= link_to(child.label_plural, index_path(:model_name => child.abstract_model.to_param))
|
20
|
+
= treeview true
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module RailsAdmin
|
3
|
+
class TreeviewGenerator < Rails::Generators::Base
|
4
|
+
class << self
|
5
|
+
def source_root
|
6
|
+
File.expand_path("../../../../app", __FILE__)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def copy_views
|
11
|
+
copy_file "views/layouts/rails_admin/_navigation.html.haml", "app/views/layouts/rails_admin/_navigation.html.haml"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "rails_admin-treeview/version"
|
2
|
+
require "rails_admin"
|
3
|
+
require "rails_admin-treeview/config/model"
|
4
|
+
|
5
|
+
module RailsAdmin
|
6
|
+
module Treeview
|
7
|
+
class Engine < Rails::Engine
|
8
|
+
initializer 'rails_admin-treeview.helper' do |app|
|
9
|
+
ActionView::Base.send :include, RailsAdminTreeviewHelper
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/rails_admin-treeview/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Nick Recobra"]
|
6
|
+
gem.email = ["oruenu@gmail.com"]
|
7
|
+
gem.description = %q{Tree-style sidebar navigation}
|
8
|
+
gem.summary = %q{Implements treeview via jquery.treeview for models}
|
9
|
+
gem.homepage = "http://github.com/oruen/rails_admin-treeview"
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "rails_admin-treeview"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.add_dependency "jquery-rails", ">= 1.0"
|
17
|
+
gem.version = RailsAdmin::Treeview::VERSION
|
18
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,256 @@
|
|
1
|
+
/*
|
2
|
+
* Treeview 1.5pre - jQuery plugin to hide and show branches of a tree
|
3
|
+
*
|
4
|
+
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
|
5
|
+
* http://docs.jquery.com/Plugins/Treeview
|
6
|
+
*
|
7
|
+
* Copyright (c) 2007 Jörn Zaefferer
|
8
|
+
*
|
9
|
+
* Dual licensed under the MIT and GPL licenses:
|
10
|
+
* http://www.opensource.org/licenses/mit-license.php
|
11
|
+
* http://www.gnu.org/licenses/gpl.html
|
12
|
+
*
|
13
|
+
* Revision: $Id: jquery.treeview.js 5759 2008-07-01 07:50:28Z joern.zaefferer $
|
14
|
+
*
|
15
|
+
*/
|
16
|
+
|
17
|
+
;(function($) {
|
18
|
+
|
19
|
+
// TODO rewrite as a widget, removing all the extra plugins
|
20
|
+
$.extend($.fn, {
|
21
|
+
swapClass: function(c1, c2) {
|
22
|
+
var c1Elements = this.filter('.' + c1);
|
23
|
+
this.filter('.' + c2).removeClass(c2).addClass(c1);
|
24
|
+
c1Elements.removeClass(c1).addClass(c2);
|
25
|
+
return this;
|
26
|
+
},
|
27
|
+
replaceClass: function(c1, c2) {
|
28
|
+
return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
|
29
|
+
},
|
30
|
+
hoverClass: function(className) {
|
31
|
+
className = className || "hover";
|
32
|
+
return this.hover(function() {
|
33
|
+
$(this).addClass(className);
|
34
|
+
}, function() {
|
35
|
+
$(this).removeClass(className);
|
36
|
+
});
|
37
|
+
},
|
38
|
+
heightToggle: function(animated, callback) {
|
39
|
+
animated ?
|
40
|
+
this.animate({ height: "toggle" }, animated, callback) :
|
41
|
+
this.each(function(){
|
42
|
+
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
|
43
|
+
if(callback)
|
44
|
+
callback.apply(this, arguments);
|
45
|
+
});
|
46
|
+
},
|
47
|
+
heightHide: function(animated, callback) {
|
48
|
+
if (animated) {
|
49
|
+
this.animate({ height: "hide" }, animated, callback);
|
50
|
+
} else {
|
51
|
+
this.hide();
|
52
|
+
if (callback)
|
53
|
+
this.each(callback);
|
54
|
+
}
|
55
|
+
},
|
56
|
+
prepareBranches: function(settings) {
|
57
|
+
if (!settings.prerendered) {
|
58
|
+
// mark last tree items
|
59
|
+
this.filter(":last-child:not(ul)").addClass(CLASSES.last);
|
60
|
+
// collapse whole tree, or only those marked as closed, anyway except those marked as open
|
61
|
+
this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
|
62
|
+
}
|
63
|
+
// return all items with sublists
|
64
|
+
return this.filter(":has(>ul)");
|
65
|
+
},
|
66
|
+
applyClasses: function(settings, toggler) {
|
67
|
+
// TODO use event delegation
|
68
|
+
this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) {
|
69
|
+
// don't handle click events on children, eg. checkboxes
|
70
|
+
if ( this == event.target )
|
71
|
+
toggler.apply($(this).next());
|
72
|
+
}).add( $("a", this) ).hoverClass();
|
73
|
+
|
74
|
+
if (!settings.prerendered) {
|
75
|
+
// handle closed ones first
|
76
|
+
this.filter(":has(>ul:hidden)")
|
77
|
+
.addClass(CLASSES.expandable)
|
78
|
+
.replaceClass(CLASSES.last, CLASSES.lastExpandable);
|
79
|
+
|
80
|
+
// handle open ones
|
81
|
+
this.not(":has(>ul:hidden)")
|
82
|
+
.addClass(CLASSES.collapsable)
|
83
|
+
.replaceClass(CLASSES.last, CLASSES.lastCollapsable);
|
84
|
+
|
85
|
+
// create hitarea if not present
|
86
|
+
var hitarea = this.find("div." + CLASSES.hitarea);
|
87
|
+
if (!hitarea.length)
|
88
|
+
hitarea = this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea);
|
89
|
+
hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {
|
90
|
+
var classes = "";
|
91
|
+
$.each($(this).parent().attr("class").split(" "), function() {
|
92
|
+
classes += this + "-hitarea ";
|
93
|
+
});
|
94
|
+
$(this).addClass( classes );
|
95
|
+
})
|
96
|
+
}
|
97
|
+
|
98
|
+
// apply event to hitarea
|
99
|
+
this.find("div." + CLASSES.hitarea).click( toggler );
|
100
|
+
},
|
101
|
+
treeview: function(settings) {
|
102
|
+
|
103
|
+
settings = $.extend({
|
104
|
+
cookieId: "treeview"
|
105
|
+
}, settings);
|
106
|
+
|
107
|
+
if ( settings.toggle ) {
|
108
|
+
var callback = settings.toggle;
|
109
|
+
settings.toggle = function() {
|
110
|
+
return callback.apply($(this).parent()[0], arguments);
|
111
|
+
};
|
112
|
+
}
|
113
|
+
|
114
|
+
// factory for treecontroller
|
115
|
+
function treeController(tree, control) {
|
116
|
+
// factory for click handlers
|
117
|
+
function handler(filter) {
|
118
|
+
return function() {
|
119
|
+
// reuse toggle event handler, applying the elements to toggle
|
120
|
+
// start searching for all hitareas
|
121
|
+
toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
|
122
|
+
// for plain toggle, no filter is provided, otherwise we need to check the parent element
|
123
|
+
return filter ? $(this).parent("." + filter).length : true;
|
124
|
+
}) );
|
125
|
+
return false;
|
126
|
+
};
|
127
|
+
}
|
128
|
+
// click on first element to collapse tree
|
129
|
+
$("a:eq(0)", control).click( handler(CLASSES.collapsable) );
|
130
|
+
// click on second to expand tree
|
131
|
+
$("a:eq(1)", control).click( handler(CLASSES.expandable) );
|
132
|
+
// click on third to toggle tree
|
133
|
+
$("a:eq(2)", control).click( handler() );
|
134
|
+
}
|
135
|
+
|
136
|
+
// handle toggle event
|
137
|
+
function toggler() {
|
138
|
+
$(this)
|
139
|
+
.parent()
|
140
|
+
// swap classes for hitarea
|
141
|
+
.find(">.hitarea")
|
142
|
+
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
143
|
+
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
|
144
|
+
.end()
|
145
|
+
// swap classes for parent li
|
146
|
+
.swapClass( CLASSES.collapsable, CLASSES.expandable )
|
147
|
+
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
148
|
+
// find child lists
|
149
|
+
.find( ">ul" )
|
150
|
+
// toggle them
|
151
|
+
.heightToggle( settings.animated, settings.toggle );
|
152
|
+
if ( settings.unique ) {
|
153
|
+
$(this).parent()
|
154
|
+
.siblings()
|
155
|
+
// swap classes for hitarea
|
156
|
+
.find(">.hitarea")
|
157
|
+
.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
158
|
+
.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
|
159
|
+
.end()
|
160
|
+
.replaceClass( CLASSES.collapsable, CLASSES.expandable )
|
161
|
+
.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
162
|
+
.find( ">ul" )
|
163
|
+
.heightHide( settings.animated, settings.toggle );
|
164
|
+
}
|
165
|
+
}
|
166
|
+
this.data("toggler", toggler);
|
167
|
+
|
168
|
+
function serialize() {
|
169
|
+
function binary(arg) {
|
170
|
+
return arg ? 1 : 0;
|
171
|
+
}
|
172
|
+
var data = [];
|
173
|
+
branches.each(function(i, e) {
|
174
|
+
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
|
175
|
+
});
|
176
|
+
$.cookie(settings.cookieId, data.join(""), settings.cookieOptions );
|
177
|
+
}
|
178
|
+
|
179
|
+
function deserialize() {
|
180
|
+
var stored = $.cookie(settings.cookieId);
|
181
|
+
if ( stored ) {
|
182
|
+
var data = stored.split("");
|
183
|
+
branches.each(function(i, e) {
|
184
|
+
$(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
|
185
|
+
});
|
186
|
+
}
|
187
|
+
}
|
188
|
+
|
189
|
+
// add treeview class to activate styles
|
190
|
+
this.addClass("treeview");
|
191
|
+
|
192
|
+
// prepare branches and find all tree items with child lists
|
193
|
+
var branches = this.find("li").prepareBranches(settings);
|
194
|
+
|
195
|
+
switch(settings.persist) {
|
196
|
+
case "cookie":
|
197
|
+
var toggleCallback = settings.toggle;
|
198
|
+
settings.toggle = function() {
|
199
|
+
serialize();
|
200
|
+
if (toggleCallback) {
|
201
|
+
toggleCallback.apply(this, arguments);
|
202
|
+
}
|
203
|
+
};
|
204
|
+
deserialize();
|
205
|
+
break;
|
206
|
+
case "location":
|
207
|
+
var current = this.find("a").filter(function() {
|
208
|
+
return this.href.toLowerCase() == location.href.toLowerCase();
|
209
|
+
});
|
210
|
+
if ( current.length ) {
|
211
|
+
// TODO update the open/closed classes
|
212
|
+
var items = current.addClass("selected").parents("ul, li").add( current.next() ).show();
|
213
|
+
if (settings.prerendered) {
|
214
|
+
// if prerendered is on, replicate the basic class swapping
|
215
|
+
items.filter("li")
|
216
|
+
.swapClass( CLASSES.collapsable, CLASSES.expandable )
|
217
|
+
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
218
|
+
.find(">.hitarea")
|
219
|
+
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
220
|
+
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );
|
221
|
+
}
|
222
|
+
}
|
223
|
+
break;
|
224
|
+
}
|
225
|
+
|
226
|
+
branches.applyClasses(settings, toggler);
|
227
|
+
|
228
|
+
// if control option is set, create the treecontroller and show it
|
229
|
+
if ( settings.control ) {
|
230
|
+
treeController(this, settings.control);
|
231
|
+
$(settings.control).show();
|
232
|
+
}
|
233
|
+
|
234
|
+
return this;
|
235
|
+
}
|
236
|
+
});
|
237
|
+
|
238
|
+
// classes used by the plugin
|
239
|
+
// need to be styled via external stylesheet, see first example
|
240
|
+
$.treeview = {};
|
241
|
+
var CLASSES = ($.treeview.classes = {
|
242
|
+
open: "open",
|
243
|
+
closed: "closed",
|
244
|
+
expandable: "expandable",
|
245
|
+
expandableHitarea: "expandable-hitarea",
|
246
|
+
lastExpandableHitarea: "lastExpandable-hitarea",
|
247
|
+
collapsable: "collapsable",
|
248
|
+
collapsableHitarea: "collapsable-hitarea",
|
249
|
+
lastCollapsableHitarea: "lastCollapsable-hitarea",
|
250
|
+
lastCollapsable: "lastCollapsable",
|
251
|
+
lastExpandable: "lastExpandable",
|
252
|
+
last: "last",
|
253
|
+
hitarea: "hitarea"
|
254
|
+
});
|
255
|
+
|
256
|
+
})(jQuery);
|
@@ -0,0 +1,74 @@
|
|
1
|
+
.treeview, .treeview ul {
|
2
|
+
padding: 0;
|
3
|
+
margin: 0;
|
4
|
+
list-style: none;
|
5
|
+
}
|
6
|
+
|
7
|
+
.treeview ul {
|
8
|
+
/*background-color: white;*/
|
9
|
+
margin-top: 4px;
|
10
|
+
}
|
11
|
+
|
12
|
+
.treeview .hitarea {
|
13
|
+
background: url(/assets/jquery_treeview/treeview-default.gif) -64px -25px no-repeat;
|
14
|
+
height: 16px;
|
15
|
+
width: 16px;
|
16
|
+
margin-left: -16px;
|
17
|
+
float: left;
|
18
|
+
cursor: pointer;
|
19
|
+
}
|
20
|
+
/* fix for IE6 */
|
21
|
+
* html .hitarea {
|
22
|
+
display: inline;
|
23
|
+
float:none;
|
24
|
+
}
|
25
|
+
|
26
|
+
.treeview li {
|
27
|
+
margin: 0;
|
28
|
+
padding: 3px 0pt 3px 16px;
|
29
|
+
}
|
30
|
+
|
31
|
+
.treeview a.selected {
|
32
|
+
background-color: #eee;
|
33
|
+
}
|
34
|
+
|
35
|
+
#treecontrol { margin: 1em 0; display: none; }
|
36
|
+
|
37
|
+
.treeview .hover { color: red; cursor: pointer; }
|
38
|
+
|
39
|
+
.treeview li { background: url(/assets/jquery_treeview/treeview-default-line.gif) 0 0 no-repeat; }
|
40
|
+
.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
|
41
|
+
|
42
|
+
.treeview .expandable-hitarea { background-position: -80px -3px; }
|
43
|
+
|
44
|
+
.treeview li.last { background-position: 0 -1766px }
|
45
|
+
.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(/assets/jquery_treeview/treeview-default.gif); }
|
46
|
+
.treeview li.lastCollapsable { background-position: 0 -111px }
|
47
|
+
.treeview li.lastExpandable { background-position: -32px -67px }
|
48
|
+
|
49
|
+
.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
|
50
|
+
|
51
|
+
.treeview-red li { background-image: url(/assets/jquery_treeview/treeview-red-line.gif); }
|
52
|
+
.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(/assets/jquery_treeview/treeview-red.gif); }
|
53
|
+
|
54
|
+
.treeview-black li { background-image: url(/assets/jquery_treeview/treeview-black-line.gif); }
|
55
|
+
.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(/assets/jquery_treeview/treeview-black.gif); }
|
56
|
+
|
57
|
+
.treeview-gray li { background-image: url(/assets/jquery_treeview/treeview-gray-line.gif); }
|
58
|
+
.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(/assets/jquery_treeview/treeview-gray.gif); }
|
59
|
+
|
60
|
+
.treeview-famfamfam li { background-image: url(/assets/jquery_treeview/treeview-famfamfam-line.gif); }
|
61
|
+
.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(/assets/jquery_treeview/treeview-famfamfam.gif); }
|
62
|
+
|
63
|
+
.treeview .placeholder {
|
64
|
+
background: url(/assets/jquery_treeview/ajax-loader.gif) 0 0 no-repeat;
|
65
|
+
height: 16px;
|
66
|
+
width: 16px;
|
67
|
+
display: block;
|
68
|
+
}
|
69
|
+
|
70
|
+
.filetree li { padding: 3px 0 2px 16px; }
|
71
|
+
.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
|
72
|
+
.filetree span.folder { background: url(/assets/jquery_treeview/folder.gif) 0 0 no-repeat; }
|
73
|
+
.filetree li.expandable span.folder { background: url(/assets/jquery_treeview/folder-closed.gif) 0 0 no-repeat; }
|
74
|
+
.filetree span.file { background: url(/assets/jquery_treeview/file.gif) 0 0 no-repeat; }
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails_admin-treeview
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nick Recobra
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-09 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: jquery-rails
|
16
|
+
requirement: &2153707780 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2153707780
|
25
|
+
description: Tree-style sidebar navigation
|
26
|
+
email:
|
27
|
+
- oruenu@gmail.com
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- LICENSE
|
35
|
+
- README.md
|
36
|
+
- Rakefile
|
37
|
+
- app/helpers/rails_admin_treeview_helper.rb
|
38
|
+
- app/views/layouts/rails_admin/_navigation.html.haml
|
39
|
+
- lib/generators/rails_admin/treeview_generator.rb
|
40
|
+
- lib/rails_admin-treeview.rb
|
41
|
+
- lib/rails_admin-treeview/config/model.rb
|
42
|
+
- lib/rails_admin-treeview/version.rb
|
43
|
+
- rails_admin-treeview.gemspec
|
44
|
+
- vendor/assets/images/jquery_treeview/ajax-loader.gif
|
45
|
+
- vendor/assets/images/jquery_treeview/file.gif
|
46
|
+
- vendor/assets/images/jquery_treeview/folder-closed.gif
|
47
|
+
- vendor/assets/images/jquery_treeview/folder.gif
|
48
|
+
- vendor/assets/images/jquery_treeview/minus.gif
|
49
|
+
- vendor/assets/images/jquery_treeview/plus.gif
|
50
|
+
- vendor/assets/images/jquery_treeview/treeview-black-line.gif
|
51
|
+
- vendor/assets/images/jquery_treeview/treeview-black.gif
|
52
|
+
- vendor/assets/images/jquery_treeview/treeview-default-line.gif
|
53
|
+
- vendor/assets/images/jquery_treeview/treeview-default.gif
|
54
|
+
- vendor/assets/images/jquery_treeview/treeview-famfamfam-line.gif
|
55
|
+
- vendor/assets/images/jquery_treeview/treeview-famfamfam.gif
|
56
|
+
- vendor/assets/images/jquery_treeview/treeview-gray-line.gif
|
57
|
+
- vendor/assets/images/jquery_treeview/treeview-gray.gif
|
58
|
+
- vendor/assets/images/jquery_treeview/treeview-red-line.gif
|
59
|
+
- vendor/assets/images/jquery_treeview/treeview-red.gif
|
60
|
+
- vendor/assets/javascripts/jquery.treeview.js
|
61
|
+
- vendor/assets/stylesheets/jquery.treeview.css
|
62
|
+
homepage: http://github.com/oruen/rails_admin-treeview
|
63
|
+
licenses: []
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.8.6
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: Implements treeview via jquery.treeview for models
|
86
|
+
test_files: []
|