muck-raker 0.1.21 → 0.1.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/README.rdoc +14 -0
  2. data/Rakefile +2 -0
  3. data/VERSION +1 -1
  4. data/app/controllers/admin/muck/feeds_controller.rb +23 -157
  5. data/app/controllers/muck/entries_controller.rb +7 -7
  6. data/app/controllers/muck/feeds_controller.rb +1 -1
  7. data/app/controllers/muck/recommendations_controller.rb +20 -16
  8. data/app/controllers/muck/visits_controller.rb +20 -0
  9. data/app/helpers/muck_raker_helper.rb +5 -1
  10. data/app/models/click.rb +8 -0
  11. data/app/models/entry.rb +39 -9
  12. data/app/models/feed.rb +89 -25
  13. data/app/models/feed_parent.rb +5 -0
  14. data/app/models/recommendation.rb +5 -0
  15. data/app/models/tag_cloud.rb +4 -0
  16. data/app/views/admin/feeds/index.html.erb +29 -59
  17. data/app/views/entries/_related_entry.html.erb +1 -1
  18. data/app/views/entries/_result.html.erb +1 -1
  19. data/app/views/feeds/_feed.html.erb +14 -1
  20. data/app/views/feeds/edit.html.erb +1 -1
  21. data/app/views/parts/_add_feed.html.erb +4 -4
  22. data/app/views/recommendations/index.pjs.erb +8 -8
  23. data/app/views/recommendations/index.rss.builder +3 -3
  24. data/app/views/recommendations/index.xml.builder +8 -8
  25. data/app/views/recommendations/index_js.pjs.erb +4 -0
  26. data/app/views/recommendations/index_real_time.pjs.erb +44 -0
  27. data/app/views/recommendations/index_real_time.xml.builder +26 -0
  28. data/app/views/visits/show.html.erb +156 -0
  29. data/config/muck_raker_routes.rb +19 -15
  30. data/db/bootstrap/services.yml +23 -23
  31. data/db/migrate/20090602191243_create_muck_raker.rb +2 -2
  32. data/db/migrate/20090728165716_add_etag_to_feeds.rb +9 -0
  33. data/db/migrate/20090730045848_add_comment_cache_to_entries.rb +9 -0
  34. data/db/migrate/20090804211240_add_entry_id_to_shares.rb +9 -0
  35. data/lib/muck_raker/tasks.rb +21 -24
  36. data/locales/en.yml +18 -1
  37. data/muck-raker.gemspec +82 -6
  38. data/raker/lib/recommenderd.jar +0 -0
  39. data/test/feed_archive/http---www-oercommons-org-oai-verb-ListRecords-metadataPrefix-oer_recommender-set-collection-american-physical-society/1248886128173.xml +56 -0
  40. data/test/feed_archive/http---www-oercommons-org-oai-verb-ListRecords-metadataPrefix-oer_recommender-set-collection-arizona-state-university/1248886130492.xml +49 -0
  41. data/test/feed_archive/http---www-oercommons-org-oai-verb-ListRecords-metadataPrefix-oer_recommender-set-collection-aspire/1248886130883.xml +192 -0
  42. data/test/rails_root/Rakefile +3 -0
  43. data/test/rails_root/app/controllers/application_controller.rb +10 -1
  44. data/test/rails_root/app/models/activity.rb +3 -0
  45. data/test/rails_root/app/models/comment.rb +3 -0
  46. data/test/rails_root/app/models/share.rb +4 -0
  47. data/test/rails_root/app/models/user.rb +5 -0
  48. data/test/rails_root/app/views/default/index.html.erb +2 -0
  49. data/test/rails_root/app/views/layouts/frame.html.erb +35 -0
  50. data/test/rails_root/config/database.yml +4 -2
  51. data/test/rails_root/config/environment.rb +3 -0
  52. data/test/rails_root/config/environments/cucumber.rb +21 -0
  53. data/test/rails_root/config/global_config.yml +2 -0
  54. data/test/rails_root/config/routes.rb +1 -1
  55. data/test/rails_root/db/bootstrap/attention.yml +6 -0
  56. data/test/rails_root/db/bootstrap/feeds.yml +4268 -0
  57. data/test/rails_root/db/bootstrap/oai_endpoints.yml +6 -0
  58. data/test/rails_root/db/bootstrap/services.yml +172 -0
  59. data/test/rails_root/db/migrate/20090402033319_add_muck_activities.rb +36 -0
  60. data/test/rails_root/db/migrate/20090602191243_create_muck_raker.rb +2 -2
  61. data/test/rails_root/db/migrate/20090613173314_create_comments.rb +24 -0
  62. data/test/rails_root/db/migrate/20090728165716_add_etag_to_feeds.rb +9 -0
  63. data/test/rails_root/db/migrate/20090730044139_add_comment_cache.rb +9 -0
  64. data/test/rails_root/db/migrate/20090730045848_add_comment_cache_to_entries.rb +9 -0
  65. data/test/rails_root/db/migrate/20090730154102_allow_null_user.rb +9 -0
  66. data/test/rails_root/db/migrate/20090803185323_create_shares.rb +18 -0
  67. data/test/rails_root/db/migrate/20090804211240_add_entry_id_to_shares.rb.rb +9 -0
  68. data/test/rails_root/features/feeds.feature +13 -0
  69. data/test/rails_root/features/step_definitions/common_steps.rb +93 -0
  70. data/test/rails_root/features/step_definitions/visit_steps.rb +6 -0
  71. data/test/rails_root/features/step_definitions/webrat_steps.rb +52 -23
  72. data/test/rails_root/features/support/paths.rb +36 -0
  73. data/test/rails_root/features/visit.feature +10 -0
  74. data/test/rails_root/lib/tasks/cucumber.rake +20 -0
  75. data/test/rails_root/public/images/icons/blue_guy.png +0 -0
  76. data/test/rails_root/public/images/icons/cancel.png +0 -0
  77. data/test/rails_root/public/images/icons/close.png +0 -0
  78. data/test/rails_root/public/images/icons/delete.png +0 -0
  79. data/test/rails_root/public/images/icons/exclaim.png +0 -0
  80. data/test/rails_root/public/images/icons/grey_guy.png +0 -0
  81. data/test/rails_root/public/images/icons/hide.png +0 -0
  82. data/test/rails_root/public/images/icons/information.png +0 -0
  83. data/test/rails_root/public/images/icons/minus.png +0 -0
  84. data/test/rails_root/public/images/icons/question.png +0 -0
  85. data/test/rails_root/public/images/icons/search_box.png +0 -0
  86. data/test/rails_root/public/images/icons/star.png +0 -0
  87. data/test/rails_root/public/images/icons/stop.png +0 -0
  88. data/test/rails_root/public/images/icons/thumb_down.png +0 -0
  89. data/test/rails_root/public/images/icons/thumb_up.png +0 -0
  90. data/test/rails_root/public/images/icons/vote.png +0 -0
  91. data/test/rails_root/public/javascripts/jquery/jrails.js +1 -0
  92. data/test/rails_root/public/javascripts/muck.js +15 -1
  93. data/test/rails_root/public/javascripts/muck_activities.js +1 -1
  94. data/test/rails_root/public/stylesheets/application.css +49 -1
  95. data/test/rails_root/public/stylesheets/styles.css +2 -1
  96. data/test/rails_root/script/cucumber +2 -1
  97. data/test/rails_root/test/functional/admin/feeds_controller_test.rb +37 -0
  98. data/test/rails_root/test/functional/feed_previews_controller_test.rb +1 -1
  99. data/test/rails_root/test/functional/visits_controller_test.rb +21 -0
  100. data/test/rails_root/test/test_helper.rb +2 -1
  101. data/test/rails_root/test/unit/entry_test.rb +12 -0
  102. data/test/rails_root/test/unit/feed_parent_test.rb +17 -0
  103. data/test/rails_root/test/unit/feed_test.rb +42 -3
  104. data/test/rails_root/test/unit/tag_cloud_test.rb +4 -0
  105. metadata +89 -4
  106. data/app/models/language.rb +0 -16
  107. data/app/views/recommendations/document_not_found.html.erb +0 -13
@@ -1,3 +1,7 @@
1
+ <!--
2
+ this was an experiment with randomizing order in the js instead of server side
3
+ it is no longer used
4
+ -->
1
5
  <% if @recs.size > 0 %>
2
6
  function avg(aRecs){dSum = 0; for(nRec = 0; nRec < aRecs.length; nRec++) {dSum += aRecs[nRec].relevance;} return dSum/aRecs.length;}
3
7
  function std(aRecs,dAvg){dSum = 0; for(nRec = 0; nRec < aRecs.length; nRec++) {dSum += Math.pow((aRecs[nRec].relevance-dAvg),2);} return Math.sqrt(dSum/aRecs.length);}
@@ -0,0 +1,44 @@
1
+ <%
2
+ @json_recommendations = @entry.json_recommendations(@limit, params[:order] || "mixed", true, params[:omit_feeds] || nil)
3
+ if !@json_recommendations.nil?
4
+ @direct_link_text = params[:direct_link_text] || t('muck.raker.direct_link')
5
+ %>
6
+ var catalog_page = <%= !@entry.direct_link.nil? and @uri == @entry.permalink %>;
7
+ var document_host = '<%= @host %>';
8
+ var recs = <%= @json_recommendations %>.solr_data.docs;
9
+ var app = "http://folksemantic.com/";
10
+ <% if @details == true -%>
11
+ function truncate(text, length) {
12
+ nEnd = text.indexOf(" ", 200);
13
+ if (nEnd < 200) return text;
14
+ else return text.substring(0, nEnd) + " ...";
15
+ }
16
+ var asMonths = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
17
+ function format_date(published_at) {
18
+ date = new Date();
19
+ date.setTime(Date.parse(published_at));
20
+ return date.getDate() + " " + asMonths[date.getMonth()] + " " + date.getUTCFullYear();
21
+ }
22
+ <% end %>
23
+ document.write('<div class="oer_recommender_container">');
24
+ <% if params[:title] %>document.write('<div class="oer_recommender_title"><%= t('muck.raker.gm_title') %></div>');<% end %>
25
+ document.write('<div class="oer_recommender_list">');
26
+ for(nRec = 0; nRec < recs.length; nRec++) {
27
+ r = recs[nRec].entry;
28
+ metadata_link = catalog_page && document_host == r.uri.substring(0, document_host.length);
29
+ direct_link = metadata_link && r.direct_link;
30
+ document.write('<p class="oer_recommender_item">');
31
+ document.write('<a class="oer_recommender_recommendation_link" href="' + (r.direct_link ? r.direct_link : r.permalink) + '">' + r.title + ' (' + r.collection + ')</a>');
32
+ if (direct_link) document.write(' <a class="oer_recommender_direct_link" href="' + app + 'r?id=' + r.id + '&target=direct_link"><%= @direct_link_text %></a>');
33
+ <% if @details == true -%>
34
+ document.write(' <span class="oer_recommender_published_at">(' + format_date(r.published_at) + ')</span>');
35
+ document.write(' <span class="oer_recommender_relevance_score"><%= t('muck.raker.relevance')%>: ' + Math.round(r.relevance*100)/100 + '</span>');
36
+ document.write('<br/><span class="oer_recommender_description">' + truncate(r.description) + '</span>');
37
+ document.write('<br/><span class="oer_recommender_uri">' + r.uri + '</span>');
38
+ <% end -%>
39
+ document.write('</a></p>');
40
+ }
41
+ document.write('</div>');
42
+ <% if params[:more_link] %>document.write('<div class="oer_recommender_more_link"><a href="' + app + 'documents/<%= @entry.id %>"><%= t('muck.raker.gm_more_prompt') %></a></div>');<% end %>
43
+ document.write('</div>');
44
+ <% end %>
@@ -0,0 +1,26 @@
1
+ xml.instruct!
2
+
3
+ if @entry.nil?
4
+ xml.recommendations
5
+ else
6
+
7
+ @recommendations = @entry.ranked_recommendations(@limit, params[:order] || "mixed", @details)
8
+ xml.recommendations(:document_id => @entry.nil? ? "" : @entry.id, :uri => @uri, :title => t("muck.raker.gm_title"), :more_prompt => t("muck.raker.gm_more_prompt"), :direct_link_text => t("muck.raker.direct_link")) do
9
+ @recommendations.results.each do |recommendation|
10
+ xml.recommendation do
11
+ xml.title recommendation["title"]
12
+ xml.collection recommendation["collection"]
13
+ xml.link recommendation["direct_link"].empty? ? recommendation["permalink"] : recommendation["direct_link"]
14
+
15
+ if @details == true
16
+ xml.description recommendation["description"]
17
+ xml.relevance round(recommendation["score"])
18
+ xml.published_at recommendation["published_at"]
19
+ xml.author recommendation["author"]
20
+ else
21
+ xml.description ""
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,156 @@
1
+ <div id="toolbar">
2
+ <div id="profile" class="section">
3
+ </div>
4
+ <div id="close" class="section">
5
+ <a id="close_frame" title="Remove frame and go to this web address." class="url_fragment" href="<%= @resource_uri %>"> </a>
6
+ <a id="close_frame_text" title="Remove frame and go to this web address." class="url_fragment" href="<%= @resource_uri %>"><%= t('muck.raker.close') %></a>
7
+ </div>
8
+ <div id="search" class="section">
9
+ <% form_tag(search_entries_path, {:method => :get}) do -%>
10
+ <div id="search_box"><%= text_field_tag(:q, '', :id => 'search-box') %></div>
11
+ <input id="search_go" class="input-button" type="submit" value="<%= t('muck.raker.search_button') %>"/>
12
+ <% end -%>
13
+ </div>
14
+ <div id="tools" class="section">
15
+ <%#= link_to t('muck.raker.remix'), new_content_path(@entry), :id => 'share' - copy the page into the content system %>
16
+ <%#= link_to t('muck.raker.save'), new_content_path(@entry), :id => 'share' - save the content for use later on %>
17
+ <% if GlobalConfig.enable_raker_shares -%>
18
+ <% if logged_in? -%>
19
+ <%= link_to t('muck.raker.share'), new_user_share_path(current_user, :title => @entry.title, :uri => @resource_uri), :id => 'share' %>
20
+ <% else -%>
21
+ <%= link_to t('muck.raker.login_to_prompt'), login_path, :id => 'login' %>
22
+ <% end -%>
23
+ <% end -%>
24
+ <%= link_to t('muck.raker.comment_entries_count', :count => @entry.comment_count), entry_comments_path(@entry), :id => 'comment' if GlobalConfig.enable_raker_comments %>
25
+ </div>
26
+ </div>
27
+
28
+ <div id="comments_tool" class="tool" style="display:none;">
29
+ <div id="comments_tools_close_wrapper" class="close_link_wrapper">
30
+ <a href="#" id="comments_tools_close" class="close_link"><%= t('muck.raker.hide')%></a>
31
+ </div>
32
+ <div class="tools_container">
33
+ <div id="comments_wrapper" class="tools_wrapper">
34
+ <%= show_comments(@comments) %>
35
+ </div>
36
+ <div id="comments_control">
37
+ <% if logged_in? -%>
38
+ <%= output_errors(t('muck.comments.problem_adding_comment'), {:class => 'help-box'}, @comment) %>
39
+ <%= comment_form(@entry, nil, true) %>
40
+ <% else -%>
41
+ <%= link_to t('muck.raker.login_to_comment'), login_path %>
42
+ <% end -%>
43
+ </div>
44
+ </div>
45
+ </div>
46
+
47
+ <div id="share_tool" class="tool" style="display:none;">
48
+ <div id="share_tool_close_wrapper" class="close_link_wrapper">
49
+ <a href="#" id="share_tool_close" class="close_link"><%= t('muck.raker.hide')%></a>
50
+ </div>
51
+ <div class="tools_container">
52
+ <div id="shares_control">
53
+ <h2><%= t('muck.shares.share_title') %></h2>
54
+ <% if logged_in? -%>
55
+ <% if already_shared?(current_user, @resource_uri)-%>
56
+ <%= t('muck.raker.already_shared') %>
57
+ <% end -%>
58
+ <%= output_errors(t('muck.shares.problem_adding_share'), {:class => 'help-box'}, @share) %>
59
+ <% share_form(@share) do |f| -%>
60
+ <%= f.hidden_field :entry_id -%>
61
+ <%= hidden_field_tag :render_new, false -%>
62
+ <% end -%>
63
+ <% else -%>
64
+ <%= link_to t('muck.shares.login_prompt'), login_path %>
65
+ <% end -%>
66
+ </div>
67
+ </div>
68
+ </div>
69
+
70
+ <div id="frame_content" class="framed_content">
71
+ <iframe id="content_iframe" class="framed_content" name="iframe" src="<%= @resource_uri %>" frameborder="0" scrolling="auto" noresize="noresize"></iframe>
72
+ </div>
73
+
74
+ <% content_for :head do -%>
75
+ <%= javascript_tag %[var COMMENT_PROMPT = '#{t('muck.raker.write_comment_prompt')}';] %>
76
+ <%= javascript_tag %[var ADD_COMMENT_MESSAGE = '#{t('muck.raker.adding_comment_message')}';] %>
77
+ <%= javascript_tag %[var ADD_SHARE_MESSAGE = '#{t('muck.shares.adding_share')}';] %>
78
+ <% end -%>
79
+
80
+ <%# content_for :javascript do -%>
81
+ <script type="text/javascript" language="JavaScript">
82
+ jQuery(document).ready(function() {
83
+ jQuery(window).bind('resize', function() {
84
+ maximize_space();
85
+ });
86
+ jQuery('#comment').click(function(){
87
+ return show_tool('comments');
88
+ });
89
+ jQuery('#share').click(function(){
90
+ return show_tool('share');
91
+ });
92
+ jQuery('.close_link').click(function(){
93
+ jQuery('.tool').hide();
94
+ jQuery("#content_iframe").width('100%');
95
+ return false;
96
+ });
97
+ setup_comment_submit();
98
+ setup_share_submit();
99
+ });
100
+ function show_tool(tool) {
101
+ jQuery('.tool').hide();
102
+ jQuery("#content_iframe").width('75%');
103
+ jQuery('#' + tool + '_tool').show();
104
+ maximize_space();
105
+ return false;
106
+ }
107
+ function maximize_space() {
108
+ var container = jQuery(".tools_container");
109
+ var spacer = jQuery('#comments_tools_close_wrapper').height() + 5;
110
+ container.height(jQuery(window).height() - (jQuery('#toolbar').height() + spacer));
111
+ }
112
+ function setup_comment_submit(){
113
+ jQuery(".comment-submit").click(function() {
114
+ jQuery(this).siblings('textarea').hide();
115
+ jQuery(this).parent().append('<p class="comment-loading"><img src="/images/spinner.gif" alt="loading..." /> ' + ADD_COMMENT_MESSAGE + '</p>');
116
+ var form = jQuery(this).parents('form');
117
+ jQuery.post(form.attr('action'), form.serialize() + '&format=json',
118
+ function(data){
119
+ var json = eval('(' + data + ')');
120
+ if(!json.success){
121
+ jQuery.jGrowl.info(json.message);
122
+ } else {
123
+ jQuery('.comment-loading').remove();
124
+ jQuery('#comments_tool').find('textarea').show();
125
+ jQuery('#comments_tool').find('textarea').val('');
126
+ jQuery("#comments_container").animate({ scrollTop: jQuery("#comments_container").attr("scrollHeight") }, 3000);
127
+ var contents = jQuery(json.html)
128
+ contents.hide();
129
+ jQuery('#comments_wrapper').append(contents);
130
+ contents.fadeIn("slow");
131
+ }
132
+ });
133
+ return false;
134
+ });
135
+ }
136
+ function setup_share_submit(){
137
+ jQuery('#share_submit_share_new').click(function() {
138
+ jQuery(this).parent().append('<p class="share-loading"><img src="/images/spinner.gif" alt="loading..." /> ' + ADD_SHARE_MESSAGE + '</p>');
139
+ jQuery('#share_submit_share_new').hide();
140
+ var form = jQuery(this).parents('form');
141
+ jQuery.post(form.attr('action'), form.serialize() + '&format=json',
142
+ function(data){
143
+ var json = eval('(' + data + ')');
144
+ jQuery('.share-loading').remove();
145
+ jQuery('#share_submit_share_new').show();
146
+ if(!json.success){
147
+ jQuery.jGrowl.info(json.message);
148
+ } else {
149
+ jQuery.jGrowl.info(json.message);
150
+ }
151
+ });
152
+ return false;
153
+ });
154
+ }
155
+ </script>
156
+ <%# end -%>
@@ -2,7 +2,7 @@ ActionController::Routing::Routes.draw do |map|
2
2
 
3
3
  # admin
4
4
  map.namespace :admin do |a|
5
- a.resources :feeds, :controller => 'muck/feeds', :member => { :harvest_now => :post, :ban => :post, :unban => :post }
5
+ a.resources :feeds, :controller => 'muck/feeds'
6
6
  end
7
7
 
8
8
  map.connect '/feed_list', :controller => 'muck/feeds', :action => 'selection_list'
@@ -12,27 +12,31 @@ ActionController::Routing::Routes.draw do |map|
12
12
  map.resources :resources, :controller => 'muck/entries'
13
13
 
14
14
  map.connect 'r', :controller => 'muck/entries', :action => 'track_clicks'
15
- map.connect 'collections', :controller => 'entries', :action => 'collections'
15
+ map.connect 'collections', :controller => 'muck/entries', :action => 'collections'
16
16
 
17
+ map.resources :visits, :controller => 'muck/visits'
17
18
  map.resources :feed_previews, :controller => 'muck/feed_previews', :collection => { :select_feeds => :post }
18
- map.resources :entries
19
+
20
+ map.resources :entries, :controller => 'muck/entries', :collection => { :search => :get } do |entries|
21
+ # have to map into the muck/comments controller or rails can't find the comments
22
+ entries.resources :comments, :controller => 'muck/comments'
23
+ end
24
+
19
25
  map.resources :feeds, :controller => 'muck/feeds', :collection => { :new_extended => :get }, :has_many => :entries
20
26
  map.resources :recommendations, :controller => 'muck/recommendations'
21
27
 
22
28
  # redirect (and hit tracking)
23
29
 
24
30
  # search
25
- map.connect 'search/relations.:format/*terms', :controller => 'search', :action => 'relations'
26
- map.connect 'search/relations/*terms', :controller => 'search', :action => 'relations'
27
- map.connect 'search/source_uri.:format', :controller => 'search', :action => 'source_uri'
28
- map.connect 'search/source_uri', :controller => 'search', :action => 'source_uri'
29
- map.connect 'search/destination_uri.:format', :controller => 'search', :action => 'destination_uri'
30
- map.connect 'search/destination_uri', :controller => 'search', :action => 'destination_uri'
31
- map.connect 'search/uris.:format', :controller => 'search', :action => 'uris'
32
- map.connect 'search/uris', :controller => 'search', :action => 'uris'
33
- map.connect 'search/results.:format', :controller => 'search', :action => 'results'
34
- map.connect 'search/results', :controller => 'search', :action => 'results'
35
-
36
- map.connect '/frames', :controller => 'documents', :action => 'frames'
31
+ map.connect 'search/relations.:format/*terms', :controller => 'muck/search', :action => 'relations'
32
+ map.connect 'search/relations/*terms', :controller => 'muck/search', :action => 'relations'
33
+ map.connect 'search/source_uri.:format', :controller => 'muck/search', :action => 'source_uri'
34
+ map.connect 'search/source_uri', :controller => 'muck/search', :action => 'source_uri'
35
+ map.connect 'search/destination_uri.:format', :controller => 'muck/search', :action => 'destination_uri'
36
+ map.connect 'search/destination_uri', :controller => 'muck/search', :action => 'destination_uri'
37
+ map.connect 'search/uris.:format', :controller => 'muck/search', :action => 'uris'
38
+ map.connect 'search/uris', :controller => 'muck/search', :action => 'uris'
39
+ map.connect 'search/results.:format', :controller => 'muck/search', :action => 'results'
40
+ map.connect 'search/results', :controller => 'muck/search', :action => 'results'
37
41
 
38
42
  end
@@ -1,6 +1,6 @@
1
1
  rss:
2
2
  id: 1
3
- title: rss
3
+ name: rss
4
4
  uri:
5
5
  api_uri:
6
6
  uri_template:
@@ -8,7 +8,7 @@ rss:
8
8
  sequence: 1
9
9
  oai:
10
10
  id: 2
11
- title: OAI
11
+ name: OAI
12
12
  uri:
13
13
  api_uri:
14
14
  uri_template:
@@ -16,7 +16,7 @@ oai:
16
16
  sequence: 2
17
17
  twitter:
18
18
  id: 3
19
- title: Twitter
19
+ name: Twitter
20
20
  uri: "http://www.twitter.com"
21
21
  api_uri:
22
22
  uri_template:
@@ -24,7 +24,7 @@ twitter:
24
24
  sequence: 3
25
25
  youtube:
26
26
  id: 4
27
- title: You Tube
27
+ name: You Tube
28
28
  uri: "http://www.youtube.com"
29
29
  api_uri:
30
30
  uri_template: feed://www.youtube.com/rss/user/{username}/videos.rss
@@ -32,7 +32,7 @@ youtube:
32
32
  sequence: 4
33
33
  flickr:
34
34
  id: 5
35
- title: Flickr
35
+ name: Flickr
36
36
  uri: "http://www.flickr.com"
37
37
  api_uri:
38
38
  uri_template: "http://api.flickr.com/services/feeds/activity.gne?id={username}"
@@ -40,7 +40,7 @@ flickr:
40
40
  sequence: 5
41
41
  delicious:
42
42
  id: 6
43
- title: del.icio.us
43
+ name: del.icio.us
44
44
  uri: "http://del.icio.us/"
45
45
  api_uri: "https://api.del.icio.us/v1/"
46
46
  uri_template:
@@ -48,7 +48,7 @@ delicious:
48
48
  sequence: 6
49
49
  digg:
50
50
  id: 7
51
- title: Digg
51
+ name: Digg
52
52
  uri: "http://www.digg.com"
53
53
  api_uri:
54
54
  uri_template: "http://digg.com/rss/{username}/index2.xml"
@@ -56,7 +56,7 @@ digg:
56
56
  sequence: 7
57
57
  43places:
58
58
  id: 8
59
- title: 43 Places
59
+ name: 43 Places
60
60
  uri: "http://www.43places.com"
61
61
  api_uri:
62
62
  uri_template: "http://www.43places.com/rss/uber/author?username={username}"
@@ -64,7 +64,7 @@ digg:
64
64
  sequence: 8
65
65
  allconsuming:
66
66
  id: 9
67
- title: All Consuming
67
+ name: All Consuming
68
68
  uri: "http://allconsuming.net/"
69
69
  api_uri:
70
70
  uri_template: "http://allconsuming.net/person/{username}/rss"
@@ -73,7 +73,7 @@ allconsuming:
73
73
  clipmarks:
74
74
  id: 10
75
75
  sequence: 10
76
- title: Clipmarks
76
+ name: Clipmarks
77
77
  uri: "http://www.clipmarks.com"
78
78
  api_uri:
79
79
  uri_template: "http://rss.clipmarks.com/clipper/{username}/"
@@ -81,7 +81,7 @@ clipmarks:
81
81
  lastfm:
82
82
  id: 11
83
83
  sequence: 11
84
- title: Last.fm
84
+ name: Last.fm
85
85
  uri: "http://www.last.fm"
86
86
  api_uri:
87
87
  uri_template: "http://ws.audioscrobbler.com/1.0/user/{username}/recenttracks.rss"
@@ -89,7 +89,7 @@ lastfm:
89
89
  livejournal:
90
90
  id: 12
91
91
  sequence: 12
92
- title: LiveJournal
92
+ name: LiveJournal
93
93
  uri: "http://www.livejournal.com"
94
94
  api_uri:
95
95
  uri_template: "http://{username}.livejournal.com"
@@ -97,7 +97,7 @@ livejournal:
97
97
  simpy:
98
98
  id: 13
99
99
  sequence: 13
100
- title: Simpy
100
+ name: Simpy
101
101
  uri: "http://www.simpy.com"
102
102
  api_uri:
103
103
  uri_template: "http://www.simpy.com/rss/user/{username}/links/"
@@ -105,7 +105,7 @@ simpy:
105
105
  wordpress:
106
106
  id: 14
107
107
  sequence: 14
108
- title: Wordpress.com
108
+ name: Wordpress.com
109
109
  uri: "http://www.wordpress.com/"
110
110
  api_uri:
111
111
  uri_template: "http://{username}.wordpress.com/"
@@ -113,7 +113,7 @@ wordpress:
113
113
  xanga:
114
114
  id: 15
115
115
  sequence: 15
116
- title: Xanga
116
+ name: Xanga
117
117
  uri: "http://www.xanga.com"
118
118
  api_uri:
119
119
  uri_template: "http://www.xanga.com/{username}/rss"
@@ -121,7 +121,7 @@ xanga:
121
121
  citeulike:
122
122
  id: 16
123
123
  sequence: 16
124
- title: cite u like
124
+ name: cite u like
125
125
  uri: "http://www.citeulike.org"
126
126
  api_uri:
127
127
  uri_template: "http://www.citeulike.org/rss/user/{username}"
@@ -129,35 +129,35 @@ citeulike:
129
129
  googlenews:
130
130
  id: 17
131
131
  sequence: 17
132
- title: Google News
132
+ name: Google News
133
133
  uri: "http://news.google.com/"
134
134
  icon: googlenews.gif
135
135
  googleblogsearch:
136
136
  id: 18
137
137
  sequence: 18
138
- title: Google Blog Search
138
+ name: Google Blog Search
139
139
  uri: "http://blogsearch.google.com/"
140
140
  icon: googleblogs.gif
141
141
  opml:
142
142
  id: 19
143
143
  sequence: 19
144
- title: OPML
144
+ name: OPML
145
145
  icon: opml.gif
146
146
  tag:
147
147
  id: 20
148
148
  sequence: 20
149
- title: Tag
149
+ name: Tag
150
150
  icon: tag.gif
151
151
  odeo:
152
152
  id: 21
153
153
  sequence: 21
154
- title: Odeo Podcasts
154
+ name: Odeo Podcasts
155
155
  uri: "http://www.odeo.com"
156
156
  icon: odeo.gif
157
157
  technorati:
158
158
  id: 22
159
159
  sequence: 22
160
- title: Technorati
160
+ name: Technorati
161
161
  uri: "http://www.technorati.com/"
162
162
  api_uri:
163
163
  uri_template: "http://feeds.technorati.com/faves/{username}?format=rss"
@@ -165,7 +165,7 @@ technorati:
165
165
  merlot:
166
166
  id: 23
167
167
  sequence: 23
168
- title: Merlot
168
+ name: Merlot
169
169
  uri: "http://www.merlot.org/"
170
170
  api_uri:
171
171
  uri_template: