diff options
| author | hukl <contact@smyck.org> | 2009-08-08 22:38:48 +0200 |
|---|---|---|
| committer | hukl <contact@smyck.org> | 2009-08-08 22:38:48 +0200 |
| commit | 46117a9f103e2d547be2a47724e872b3f57ce983 (patch) | |
| tree | 3360a066676ecf776f62212912abcec4965bdf27 | |
| parent | 4f249507da36f219b208f88e4dea5a5cd90ca254 (diff) | |
lots of new code to manage menu items - harder than expected :/
| -rw-r--r-- | app/controllers/admin_controller.rb | 19 | ||||
| -rw-r--r-- | app/controllers/menu_items_controller.rb | 11 | ||||
| -rw-r--r-- | app/views/admin/_menu_search_results.html.erb | 3 | ||||
| -rw-r--r-- | app/views/menu_items/index.html.erb | 13 | ||||
| -rw-r--r-- | public/javascripts/admin_interface.js | 8 | ||||
| -rw-r--r-- | public/javascripts/admin_search.js | 65 |
6 files changed, 117 insertions, 2 deletions
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 517506f..b911727 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb | |||
| @@ -27,4 +27,23 @@ class AdminController < ApplicationController | |||
| 27 | end | 27 | end |
| 28 | end | 28 | end |
| 29 | 29 | ||
| 30 | def menu_search | ||
| 31 | @results = Node.search params[:search_term] | ||
| 32 | |||
| 33 | respond_to do |format| | ||
| 34 | format.html do | ||
| 35 | render :partial => 'admin/menu_search_results' | ||
| 36 | end | ||
| 37 | |||
| 38 | |||
| 39 | format.js do | ||
| 40 | render( :json => @results.map do |node| | ||
| 41 | {:node_id => node.id, :title => node.title, :unique_name => node.unique_name} | ||
| 42 | end | ||
| 43 | ) | ||
| 44 | |||
| 45 | end | ||
| 46 | end | ||
| 47 | end | ||
| 48 | |||
| 30 | end | 49 | end |
diff --git a/app/controllers/menu_items_controller.rb b/app/controllers/menu_items_controller.rb index 1ac3ddb..d6f0252 100644 --- a/app/controllers/menu_items_controller.rb +++ b/app/controllers/menu_items_controller.rb | |||
| @@ -13,6 +13,17 @@ class MenuItemsController < ApplicationController | |||
| 13 | end | 13 | end |
| 14 | 14 | ||
| 15 | def create | 15 | def create |
| 16 | respond_to do |format| | ||
| 17 | format.html {} | ||
| 18 | |||
| 19 | format.js do | ||
| 20 | MenuItem.create params[:menu_item] | ||
| 21 | end | ||
| 22 | |||
| 23 | |||
| 24 | end | ||
| 25 | |||
| 26 | |||
| 16 | end | 27 | end |
| 17 | 28 | ||
| 18 | def edit | 29 | def edit |
diff --git a/app/views/admin/_menu_search_results.html.erb b/app/views/admin/_menu_search_results.html.erb new file mode 100644 index 0000000..15a40d4 --- /dev/null +++ b/app/views/admin/_menu_search_results.html.erb | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | <%- @results.each do |result| %> | ||
| 2 | <div><%= result.unique_name %></div> | ||
| 3 | <% end %> | ||
diff --git a/app/views/menu_items/index.html.erb b/app/views/menu_items/index.html.erb index 05cc530..d2ff10e 100644 --- a/app/views/menu_items/index.html.erb +++ b/app/views/menu_items/index.html.erb | |||
| @@ -4,4 +4,15 @@ | |||
| 4 | <% @menu_items.each do |menu_item| %> | 4 | <% @menu_items.each do |menu_item| %> |
| 5 | <li><%= menu_item.title %></li> | 5 | <li><%= menu_item.title %></li> |
| 6 | <% end %> | 6 | <% end %> |
| 7 | </ul> \ No newline at end of file | 7 | </ul> |
| 8 | |||
| 9 | <div id="menu_item_search"> | ||
| 10 | <div> | ||
| 11 | <% form_tag admin_search_path do %> | ||
| 12 | <span>Add menu item: </span><%= text_field_tag :search_term %> | ||
| 13 | <% end %> | ||
| 14 | </div> | ||
| 15 | <div id="search_results"> | ||
| 16 | |||
| 17 | </div> | ||
| 18 | </div> \ No newline at end of file | ||
diff --git a/public/javascripts/admin_interface.js b/public/javascripts/admin_interface.js index 62801ca..4e390f1 100644 --- a/public/javascripts/admin_interface.js +++ b/public/javascripts/admin_interface.js | |||
| @@ -1,11 +1,19 @@ | |||
| 1 | $(document).ready(function () { | 1 | $(document).ready(function () { |
| 2 | admin_search.initialize(); | 2 | admin_search.initialize(); |
| 3 | menu_items.initialize_search(); | ||
| 3 | meta_data.initialize(); | 4 | meta_data.initialize(); |
| 4 | 5 | ||
| 5 | jQuery.ajaxSetup({ | 6 | jQuery.ajaxSetup({ |
| 6 | 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} | 7 | 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} |
| 7 | }) | 8 | }) |
| 8 | 9 | ||
| 10 | $(document).ajaxSend(function(event, request, settings) { | ||
| 11 | if (typeof(AUTH_TOKEN) == "undefined") return; | ||
| 12 | // settings.data is a serialized string like "foo=bar&baz=boink" (or null) | ||
| 13 | settings.data = settings.data || ""; | ||
| 14 | settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(AUTH_TOKEN); | ||
| 15 | }); | ||
| 16 | |||
| 9 | }); | 17 | }); |
| 10 | 18 | ||
| 11 | 19 | ||
diff --git a/public/javascripts/admin_search.js b/public/javascripts/admin_search.js index 28f87a0..1e6f545 100644 --- a/public/javascripts/admin_search.js +++ b/public/javascripts/admin_search.js | |||
| @@ -45,4 +45,67 @@ admin_search = { | |||
| 45 | } | 45 | } |
| 46 | $('#search_results').slideDown(); | 46 | $('#search_results').slideDown(); |
| 47 | } | 47 | } |
| 48 | } \ No newline at end of file | 48 | }; |
| 49 | |||
| 50 | menu_items = { | ||
| 51 | |||
| 52 | initialize_search : function() { | ||
| 53 | $("#search_term").bind("keyup", function() { | ||
| 54 | if ($(this).attr("value")) { | ||
| 55 | $.ajax({ | ||
| 56 | type: "GET", | ||
| 57 | url: "/admin/menu_search", | ||
| 58 | data: "search_term=" + $(this).attr("value"), | ||
| 59 | dataType: "json", | ||
| 60 | success : function(results) { | ||
| 61 | menu_items.show_results(results); | ||
| 62 | } | ||
| 63 | }); | ||
| 64 | } | ||
| 65 | else { | ||
| 66 | $('#search_results').slideUp(); | ||
| 67 | $('#search_results').empty(); | ||
| 68 | } | ||
| 69 | }); | ||
| 70 | }, | ||
| 71 | |||
| 72 | show_results : function(results) { | ||
| 73 | $("#search_results").empty(); | ||
| 74 | for (result in results) { | ||
| 75 | var foo = $(("<a href='#'>"+ results[result].title + "</a>")); | ||
| 76 | $(foo).bind("click", function(){ | ||
| 77 | menu_items.open_title_popup(); | ||
| 78 | //menu_items.add_item_to_menu(results[result]); | ||
| 79 | return false; | ||
| 80 | }); | ||
| 81 | |||
| 82 | $("#search_results").append(foo); | ||
| 83 | |||
| 84 | } | ||
| 85 | }, | ||
| 86 | |||
| 87 | open_title_popup : function() { | ||
| 88 | popup = $("<div><form action='#'><input id='item_title' type='text' /><input id='foobar' type='submit' /></form></div>"); | ||
| 89 | $("form", popup).submit(function(){ | ||
| 90 | alert("hi"); | ||
| 91 | return false; | ||
| 92 | }); | ||
| 93 | $("body").append(popup); | ||
| 94 | }, | ||
| 95 | |||
| 96 | add_item_to_menu : function(node) { | ||
| 97 | $.ajax({ | ||
| 98 | type: "post", | ||
| 99 | url: "/menu_items/create", | ||
| 100 | data: { | ||
| 101 | "menu_item[node_id]" : node.node_id, | ||
| 102 | "menu_item[path]" : "/" + node.unique_name, | ||
| 103 | "menu_item[title]" : node.title | ||
| 104 | }, | ||
| 105 | success : function() { | ||
| 106 | alert("s"); | ||
| 107 | } | ||
| 108 | }); | ||
| 109 | } | ||
| 110 | |||
| 111 | }; \ No newline at end of file | ||
