lolita-menu 0.0.6

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 (42) hide show
  1. data/.document +5 -0
  2. data/Gemfile +15 -0
  3. data/History.rdoc +24 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +17 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/app/controllers/menu_items_controller.rb +41 -0
  9. data/app/models/menu.rb +139 -0
  10. data/app/models/menu_item.rb +130 -0
  11. data/app/views/components/lolita/menu/_columns.html.haml +2 -0
  12. data/app/views/components/lolita/menu/_columns_body.html.haml +11 -0
  13. data/app/views/components/lolita/menu/_list.html.haml +11 -0
  14. data/app/views/components/lolita/menu_items/_display.html.haml +7 -0
  15. data/app/views/components/lolita/menu_items/_row.html.haml +10 -0
  16. data/app/views/components/lolita/menu_items/_subtree.html.haml +2 -0
  17. data/config/locales/en.yml +5 -0
  18. data/config/locales/lv.yml +5 -0
  19. data/config/routes.rb +8 -0
  20. data/lib/generators/lolita_menu/assets_generator.rb +13 -0
  21. data/lib/generators/lolita_menu/install_generator.rb +19 -0
  22. data/lib/generators/lolita_menu/templates/migrations/create_menu_items.rb +27 -0
  23. data/lib/generators/lolita_menu/templates/migrations/create_menus.rb +14 -0
  24. data/lib/lolita-menu.rb +13 -0
  25. data/lib/lolita-menu/module.rb +1 -0
  26. data/lib/lolita-menu/rails.rb +5 -0
  27. data/lolita-menu.gemspec +113 -0
  28. data/public/javascripts/jquery-ui-nested-sortables.js +356 -0
  29. data/public/javascripts/lolita/menu-items.js +86 -0
  30. data/public/stylesheets/lolita/menu/style.css +16 -0
  31. data/spec/controllers/menu_items_controller_spec.rb +5 -0
  32. data/spec/models/menu_item_spec.rb +47 -0
  33. data/spec/models/menu_spec.rb +79 -0
  34. data/spec/spec_helper.rb +22 -0
  35. data/test_orm/active_record.rb +9 -0
  36. data/test_orm/boot.rb +9 -0
  37. data/test_orm/config/active_record.yml +2 -0
  38. data/test_orm/db/migrate/01_create_lolita_menus.rb +14 -0
  39. data/test_orm/db/migrate/02_create_lolita_menu_items.rb +27 -0
  40. data/test_orm/rails/config/application.rb +8 -0
  41. data/test_orm/rails/config/enviroment.rb +5 -0
  42. metadata +213 -0
@@ -0,0 +1,86 @@
1
+ $(document).ready(function(){
2
+ function save_menu_tree(tree){
3
+ var new_positions = tree.nestedSortable('toArray');
4
+
5
+ if(tree.data("old_positions")!=tree.nestedSortable('serialize')){
6
+ $.ajax({
7
+ url:tree.attr("data-url"),
8
+ type:"put",
9
+ dataType:"html",
10
+ data:$.param({items:new_positions}),
11
+ success:function(){
12
+ tree.data("old_positions",tree.nestedSortable('serialize'))
13
+ }
14
+ })
15
+ }
16
+ }
17
+
18
+ $("ol.menu-items-tree").nestedSortable({
19
+ disableNesting: 'no-nest',
20
+ forcePlaceholderSize: true,
21
+ handle: 'div',
22
+ helper: 'clone',
23
+ items: 'li',
24
+ maxLevels: 5,
25
+ opacity: .6,
26
+ placeholder: 'placeholder',
27
+ revert: 250,
28
+ tabSize: 25,
29
+ tolerance: 'pointer',
30
+ toleranceElement: '> div',
31
+ stop:function(branch,args){
32
+ save_menu_tree($(this));
33
+ }
34
+ })
35
+
36
+ $("ol.menu-items-tree").each(function(){
37
+ $(this).data("old_positions",$(this).nestedSortable("serialize"))
38
+ })
39
+
40
+ $(".openable-row").click(function(event){
41
+ var that=this
42
+ $(".subrow").hide(0)
43
+ $("#menu_items_"+$(this).attr("data-id")).show(0);
44
+
45
+ //event.preventDefault();
46
+ })
47
+
48
+ $(".add_new_menu_item").click(function(){
49
+ $.ajax({
50
+ url:$(this).attr("data-url"),
51
+ type:"post",
52
+ context: $("#menu_tree_"+$(this).attr("data-id")),
53
+ dataType:"html",
54
+ success:function(html_data){
55
+ $(this).append(html_data)
56
+ }
57
+ })
58
+ })
59
+
60
+ $(".save_menu_tree").click(function(){
61
+ save_menu_tree($(this).attr("data-id"))
62
+ })
63
+
64
+ $(".menu-tree-content input").live("focus",function(){
65
+ $(this).data("value",$(this).val())
66
+ })
67
+
68
+ $(".menu-tree-content input").live("blur",function(){
69
+ var input=$(this);
70
+ if(input.data("value")!=input.val()){
71
+ input.data("value",input.val())
72
+ $.ajax({
73
+ url:input.attr("data-url"),
74
+ type:"put",
75
+ context:$(this),
76
+ dataType:"json",
77
+ data:{attribute:input.attr("name"),value:input.val()},
78
+ success:function(data){
79
+ var color=(data.status=="error" ? "#ff5656" : "#aaff56");
80
+ $(this).css("backgroundColor",color);
81
+ $(this).animate({ backgroundColor: "white" }, 1000);
82
+ }
83
+ })
84
+ }
85
+ })
86
+ })
@@ -0,0 +1,16 @@
1
+ ol.menu-items-tree li{
2
+ list-style:none;
3
+ width:390px;
4
+ }
5
+ div.menu-tree-content{
6
+ width:500px;
7
+ }
8
+ li.placeholder{
9
+ background-color:white;
10
+ }
11
+ input.url-input{
12
+ width:200px;
13
+ }
14
+ .list table tbody tr.subrow:hover{
15
+ background:none !important;
16
+ }
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe MenuItemsController do
4
+
5
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe MenuItem do
4
+
5
+ it "should create valid menu item" do
6
+ MenuItem.create!(:name=>"item",:url=>"/")
7
+ end
8
+
9
+ describe "positioning items" do
10
+
11
+ let(:menu){Menu.create!(:name=>"new menu")}
12
+
13
+ it "should append" do
14
+ root=MenuItem.create!
15
+ item=MenuItem.create!(:name=>"child",:url=>"/")
16
+ root.append(item)
17
+ item.reload
18
+ item.parent.should == root
19
+ end
20
+
21
+ end
22
+
23
+ describe "getting by possitions" do
24
+
25
+ let(:menu){Menu.create!(:name=>"menu")}
26
+ let(:item){MenuItem.create!(:name=>"child",:url=>"/")}
27
+
28
+ it "should find children" do
29
+ menu.append(item)
30
+ menu.root.children.should have(1).item
31
+ menu.root.children.first == item
32
+ end
33
+
34
+ it "should find parent" do
35
+ menu.append(item)
36
+ item.reload
37
+ item.parent.should == menu.root
38
+ end
39
+
40
+ it "should find root for any item" do
41
+ menu.append(item)
42
+ item.reload
43
+ item.root.should == menu.root
44
+ menu.root.root.should == menu.root
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe Menu do
4
+
5
+ describe "save whole tree" do
6
+
7
+ it "should save tree for menu when array given" do
8
+ menu=Menu.create!(:name=>"menu")
9
+ root=menu.root
10
+ items=[]
11
+ 1.upto(3) do |index|
12
+ item=MenuItem.create!(:name=>"item-#{index}")
13
+ items << menu.append(item)
14
+ end
15
+
16
+ new_positions={
17
+ :"0"=>{
18
+ :item_id=>"root",
19
+ :parent_id=>"none",
20
+ :depth=>"0",
21
+ :left => "1",
22
+ :right => "8"
23
+ },
24
+ :"1"=>{
25
+ :item_id => "#{items[0].id}",
26
+ :parent_id => "root",
27
+ :depth => "1",
28
+ :left => "2",
29
+ :right => "7"
30
+ },
31
+ :"2"=>{
32
+ :item_id => "#{items[1].id}",
33
+ :parent_id => "#{items[0].id}",
34
+ :depth => "2",
35
+ :left => "3",
36
+ :right=> "6"
37
+ },
38
+ :"3"=>{
39
+ :item_id => "#{items[2].id}",
40
+ :parent_id => "#{items[1].id}",
41
+ :depth => "3",
42
+ :left => "4",
43
+ :right=> "5"
44
+ }
45
+ }
46
+
47
+ menu.update_whole_tree(new_positions)
48
+
49
+ menu.children.should have(1).item
50
+ menu.children.first.children.should have(1).item
51
+ menu.children.first.children.first.children.should have(1).item
52
+ end
53
+ end
54
+
55
+ it "should create new menu item with name" do
56
+ Menu.create!(:name=>"my menu").name.should == "my menu"
57
+ end
58
+
59
+ it "should not create menu without name" do
60
+ lambda{
61
+ Menu.create!
62
+ }.should raise_error
63
+ end
64
+
65
+ describe "menu items" do
66
+
67
+ let(:menu){Menu.create!(:name=>"new menu")}
68
+
69
+ it "should create root item on create" do
70
+ menu.root.should_not be_nil
71
+ end
72
+
73
+ it "should add new item to menu" do
74
+ item=MenuItem.create!(:name=>"item",:url=>"/")
75
+ menu.append(item)
76
+ menu.items.should have(2).items
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require File.expand_path("test_orm/boot")
3
+
4
+ # Requires supporting ruby files with custom matchers and macros, etc,
5
+ # in spec/support/ and its subdirectories.
6
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
7
+
8
+ RSpec.configure do |config|
9
+ config.mock_with :rspec
10
+
11
+ require 'database_cleaner'
12
+
13
+ config.before(:suite) do
14
+ DatabaseCleaner.strategy = :truncation
15
+ DatabaseCleaner.orm = "active_record"
16
+ end
17
+
18
+ config.before(:all) do
19
+ DatabaseCleaner.clean
20
+ end
21
+ end
22
+
@@ -0,0 +1,9 @@
1
+ require 'active_record'
2
+ require 'logger'
3
+ dbconf = YAML::load(File.open('test_orm/config/active_record.yml'))
4
+ ActiveRecord::Base.establish_connection(dbconf)
5
+ ActiveRecord::Base.logger = Logger.new(File.open('test_orm/log/database.log', 'a'))
6
+ ActiveRecord::Migrator.up('test_orm/db/migrate')
7
+ #Dir[File.expand_path("test_orm/active_record/**/*.*")].each do |path|
8
+ # require path
9
+ #end
@@ -0,0 +1,9 @@
1
+ require 'rails'
2
+ require 'action_controller' # if you have controllers
3
+ require 'lolita'
4
+ require 'lolita/rails/all'
5
+ require File.expand_path("test_orm/active_record")
6
+ require File.expand_path('lib/lolita-menu')
7
+ require 'lolita-menu/rails'
8
+
9
+ require File.expand_path("test_orm/rails/config/enviroment")
@@ -0,0 +1,2 @@
1
+ adapter: sqlite3
2
+ database: ":memory:"
@@ -0,0 +1,14 @@
1
+ class CreateLolitaMenus < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :lolita_menus, :force=>true do |t|
4
+ t.string :name
5
+ t.timestamps
6
+ end
7
+
8
+ add_index :lolita_menus,:name
9
+ end
10
+
11
+ def self.down
12
+ drop_table :lolita_menus
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ class CreateLolitaMenuItems < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :lolita_menu_items, :force=>true do |t|
4
+ t.string :name
5
+ t.string :url
6
+ t.integer :menu_id
7
+ t.integer :lft
8
+ t.integer :rgt
9
+ t.integer :depth
10
+ t.integer :parent_id
11
+ t.boolean :is_visible
12
+ t.timestamps
13
+ end
14
+
15
+ add_index :lolita_menu_items, :menu_id
16
+ add_index :lolita_menu_items, [:lft,:rgt,:menu_id,:parent_id]
17
+ add_index :lolita_menu_items, :lft # for sorting
18
+ add_index :lolita_menu_items, :rgt
19
+ add_index :lolita_menu_items, :depth
20
+ add_index :lolita_menu_items, :parent_id
21
+ add_index :lolita_menu_items, :is_visible
22
+ end
23
+
24
+ def self.down
25
+ drop_table :menu_items
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ module Test
2
+ class Application < Rails::Application
3
+ config.root=File.expand_path("#{File.dirname(__FILE__)}/..")
4
+ config.logger=Logger.new(File.join(config.root,"log","development.log"))
5
+ config.active_support.deprecation=:log
6
+ #config.autoload_paths=File.expand_path("../#{File.dirname(__FILE__)}")
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ # Load the rails application
2
+ require File.expand_path('../application', __FILE__)
3
+
4
+ # Initialize the rails application
5
+ Test::Application.initialize!
metadata ADDED
@@ -0,0 +1,213 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lolita-menu
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.6
6
+ platform: ruby
7
+ authors:
8
+ - ITHouse
9
+ - Arturs Meisters
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2011-05-19 00:00:00 +03:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: lolita
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.1.6
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: *id001
28
+ - !ruby/object:Gem::Dependency
29
+ name: haml
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
40
+ name: rspec
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 2.6.0
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
51
+ name: sqlite3
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: *id004
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec-rails
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.6.0
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: *id005
72
+ - !ruby/object:Gem::Dependency
73
+ name: haml-rails
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: *id006
83
+ - !ruby/object:Gem::Dependency
84
+ name: shoulda
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: *id007
94
+ - !ruby/object:Gem::Dependency
95
+ name: bundler
96
+ requirement: &id008 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.0.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: *id008
105
+ - !ruby/object:Gem::Dependency
106
+ name: jeweler
107
+ requirement: &id009 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: 1.5.2
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: *id009
116
+ - !ruby/object:Gem::Dependency
117
+ name: rcov
118
+ requirement: &id010 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: "0"
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: *id010
127
+ description: Manage public menus for each project inside Lolita.
128
+ email: support@ithouse.lv
129
+ executables: []
130
+
131
+ extensions: []
132
+
133
+ extra_rdoc_files:
134
+ - LICENSE.txt
135
+ - README.rdoc
136
+ files:
137
+ - .document
138
+ - Gemfile
139
+ - History.rdoc
140
+ - LICENSE.txt
141
+ - README.rdoc
142
+ - Rakefile
143
+ - VERSION
144
+ - app/controllers/menu_items_controller.rb
145
+ - app/models/menu.rb
146
+ - app/models/menu_item.rb
147
+ - app/views/components/lolita/menu/_columns.html.haml
148
+ - app/views/components/lolita/menu/_columns_body.html.haml
149
+ - app/views/components/lolita/menu/_list.html.haml
150
+ - app/views/components/lolita/menu_items/_display.html.haml
151
+ - app/views/components/lolita/menu_items/_row.html.haml
152
+ - app/views/components/lolita/menu_items/_subtree.html.haml
153
+ - config/locales/en.yml
154
+ - config/locales/lv.yml
155
+ - config/routes.rb
156
+ - lib/generators/lolita_menu/assets_generator.rb
157
+ - lib/generators/lolita_menu/install_generator.rb
158
+ - lib/generators/lolita_menu/templates/migrations/create_menu_items.rb
159
+ - lib/generators/lolita_menu/templates/migrations/create_menus.rb
160
+ - lib/lolita-menu.rb
161
+ - lib/lolita-menu/module.rb
162
+ - lib/lolita-menu/rails.rb
163
+ - lolita-menu.gemspec
164
+ - public/javascripts/jquery-ui-nested-sortables.js
165
+ - public/javascripts/lolita/menu-items.js
166
+ - public/stylesheets/lolita/menu/style.css
167
+ - spec/controllers/menu_items_controller_spec.rb
168
+ - spec/models/menu_item_spec.rb
169
+ - spec/models/menu_spec.rb
170
+ - spec/spec_helper.rb
171
+ - test_orm/active_record.rb
172
+ - test_orm/boot.rb
173
+ - test_orm/config/active_record.yml
174
+ - test_orm/db/migrate/01_create_lolita_menus.rb
175
+ - test_orm/db/migrate/02_create_lolita_menu_items.rb
176
+ - test_orm/rails/config/application.rb
177
+ - test_orm/rails/config/enviroment.rb
178
+ has_rdoc: true
179
+ homepage: http://github.com/ithouse/lolita-menu
180
+ licenses:
181
+ - MIT
182
+ post_install_message:
183
+ rdoc_options: []
184
+
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ hash: 756297519
193
+ segments:
194
+ - 0
195
+ version: "0"
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ none: false
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: "0"
202
+ requirements: []
203
+
204
+ rubyforge_project:
205
+ rubygems_version: 1.6.1
206
+ signing_key:
207
+ specification_version: 3
208
+ summary: Menu managing plugin for Lolita.
209
+ test_files:
210
+ - spec/controllers/menu_items_controller_spec.rb
211
+ - spec/models/menu_item_spec.rb
212
+ - spec/models/menu_spec.rb
213
+ - spec/spec_helper.rb