muck-services 0.1.12 → 0.1.13

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/Rakefile CHANGED
@@ -59,6 +59,7 @@ begin
59
59
  gem.add_dependency "muck-users"
60
60
  gem.add_dependency "muck-comments"
61
61
  gem.add_development_dependency "shoulda"
62
+ gem.rubyforge_project = 'muck-services'
62
63
  gem.files.exclude "public/images/service_icons/source/*"
63
64
  gem.files.exclude "test/*"
64
65
  gem.test_files.exclude 'test/feed_archive/**'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.12
1
+ 0.1.13
@@ -18,7 +18,7 @@ class Muck::FeedsController < ApplicationController
18
18
  @feed = Feed.find(params[:id])
19
19
  @entries = @feed.entries.paginate(:page => @page, :per_page => @per_page)
20
20
  respond_to do |format|
21
- format.html { render :template => 'feeds/show', :layout => params[:layout] || true }
21
+ format.html { render :template => 'feeds/show', :layout => get_layout_by_params }
22
22
  format.pjs do
23
23
  render :update do |page|
24
24
  page.replace_html('feed-container', :partial => 'feeds/feed', :object => @feed)
@@ -29,31 +29,28 @@ class Muck::FeedsController < ApplicationController
29
29
  end
30
30
 
31
31
  def new
32
+ setup_new
32
33
  respond_to do |format|
33
- format.html { render :template => 'feeds/new', :layout => params[:layout] || true }
34
+ format.html { render :template => 'feeds/new', :layout => get_layout_by_params }
34
35
  end
35
36
  end
36
37
 
37
38
  def new_oai_rss
38
- @feed = Feed.new
39
- @feed.default_language = Language.find_by_locale('en')
40
- @feed.service_id = MuckServices::Services::RSS
41
- @oai_endpoint = OaiEndpoint.new
42
- @oai_endpoint.default_language = @feed.default_language
39
+ setup_new
43
40
  respond_to do |format|
44
- format.html { render :template => 'feeds/new_oai_rss', :layout => 'popup' }
41
+ format.html { render :template => 'feeds/new_oai_rss', :layout => get_layout_by_params }
45
42
  end
46
43
  end
47
44
 
48
45
  def new_extended
49
46
  respond_to do |format|
50
- format.html { render :template => 'feeds/new_extended', :layout => 'popup' }
47
+ format.html { render :template => 'feeds/new_extended', :layout => get_layout_by_params }
51
48
  end
52
49
  end
53
50
 
54
51
  def create
55
52
 
56
- Feed.discover_feeds(params[:feed][:uri])
53
+ Feed.discover_feeds(params[:feed][:uri]) unless params[:feed][:uri].blank?
57
54
 
58
55
  @feed = Feed.new(params[:feed])
59
56
  @feed.contributor = current_user # record the user that submitted the feed for auditing purposes
@@ -75,7 +72,7 @@ class Muck::FeedsController < ApplicationController
75
72
  def edit
76
73
  @feed = Feed.find(params[:id])
77
74
  respond_to do |format|
78
- format.html { render :template => 'feeds/edit', :layout => 'popup' }
75
+ format.html { render :template => 'feeds/edit', :layout => get_layout_by_params }
79
76
  end
80
77
  end
81
78
 
@@ -114,7 +111,7 @@ class Muck::FeedsController < ApplicationController
114
111
  if success
115
112
  flash[:notice] = t('muck.services.feed_successfully_created')
116
113
  respond_to do |format|
117
- format.html { redirect_to feed_path(@feed) }
114
+ format.html { redirect_to feed_path(@feed, :layout => get_layout_by_params) }
118
115
  format.pjs { redirect_to feed_path(@feed, :layout => 'popup') }
119
116
  format.json { render :json => @feed.as_json }
120
117
  format.xml { head :created, :location => feed_url(@feed) }
@@ -122,7 +119,7 @@ class Muck::FeedsController < ApplicationController
122
119
  else
123
120
  fail_template = params[:new_template] || 'feeds/new'
124
121
  respond_to do |format|
125
- format.html { render :template => fail_template }
122
+ format.html { render :template => fail_template, :layout => get_layout_by_params }
126
123
  format.pjs { render :template => fail_template, :layout => false }
127
124
  format.json { render :json => @feed.as_json }
128
125
  format.xml { render :xml => @feed.errors.to_xml }
@@ -136,7 +133,7 @@ class Muck::FeedsController < ApplicationController
136
133
  respond_to do |format|
137
134
  if success
138
135
  flash[:notice] = t('muck.services.feed_successfully_updated')
139
- format.html { redirect_to feed_path(@feed) }
136
+ format.html { redirect_to feed_path(@feed, :layout => get_layout_by_params) }
140
137
  format.xml { head :ok }
141
138
  else
142
139
  format.html { render :template => "feeds/edit" }
@@ -154,4 +151,21 @@ class Muck::FeedsController < ApplicationController
154
151
  end
155
152
  end
156
153
 
154
+ def setup_new
155
+ @page_title = t('muck.services.add_new_feed_title')
156
+ @feed = Feed.new
157
+ @feed.default_language = Language.find_by_locale('en')
158
+ @feed.service_id = MuckServices::Services::RSS
159
+ @oai_endpoint = OaiEndpoint.new
160
+ @oai_endpoint.default_language = @feed.default_language
161
+ end
162
+
163
+ def get_layout_by_params
164
+ if params[:layout].empty?
165
+ true
166
+ else
167
+ params[:layout]
168
+ end
169
+ end
170
+
157
171
  end
@@ -9,6 +9,7 @@ class Muck::VisitsController < ApplicationController
9
9
  @page_title = @entry.title
10
10
  @resource_uri = @entry.resource_uri
11
11
  @share = Share.new(:title => @entry.title, :uri => @resource_uri, :entry_id => @entry.id) if GlobalConfig.enable_services_shares
12
+ @recommendations = @entry.recommendations(5)
12
13
 
13
14
  if GlobalConfig.enable_services_comments
14
15
  # Show the activities related to this entry
@@ -5,6 +5,12 @@ module MuckServicesServiceHelper
5
5
  identity_feeds = parent.identity_feeds.find(:all, :include => [{:feed => :service}])
6
6
  render :partial => 'services/summary', :locals => { :identity_feeds => identity_feeds }
7
7
  end
8
+
9
+ # Render personal recommendations
10
+ def personal_recommendations(user, limit = 5)
11
+ recommendations = user.recommended_resources
12
+ render :partial => 'services/personal_recommendations', :locals => { :recommendations => recommendations }
13
+ end
8
14
 
9
15
  # Render a view with all services in categories.
10
16
  # service_categories: Results from a query to service_categories. For performance try something like this:
@@ -19,12 +19,14 @@ class Aggregation < ActiveRecord::Base
19
19
  has_friendly_id :terms, :use_slug => true
20
20
 
21
21
  belongs_to :ownable, :polymorphic => true
22
- has_many :aggregation_feeds
22
+ has_many :aggregation_feeds, :conditions => ['feed_type = ?', 'Feed']
23
+ has_many :aggregation_oai_endpoints, :conditions => ['feed_type = ?', 'OaiEndpoint']
23
24
  has_many :feeds, :through => :aggregation_feeds
24
25
 
25
26
  named_scope :by_title, :order => "title ASC"
26
27
  named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }
27
28
  named_scope :newest, :order => "created_at DESC"
29
+
28
30
 
29
31
  # Builds and then adds feeds for a given terms
30
32
  # user: User to be associated with each feed. Default is nil which makes each feed global.
@@ -88,5 +90,9 @@ class Aggregation < ActiveRecord::Base
88
90
  false
89
91
  end
90
92
  end
93
+
94
+ def self.global_feeds_id
95
+ @@global_feeds_id = Aggregation.find_by_terms('global_feeds').id
96
+ end
91
97
 
92
98
  end
@@ -0,0 +1,9 @@
1
+
2
+ class AttentionType < ActiveRecord::Base
3
+ WRITE = 1
4
+ BOOKMARK = 2
5
+ SEARCH = 3
6
+ CLICK = 4
7
+ SHARE = 5
8
+ DISCUSS = 6
9
+ end
data/app/models/entry.rb CHANGED
@@ -49,7 +49,7 @@ class Entry < ActiveRecord::Base
49
49
 
50
50
  @@default_time_on_page = 60.0
51
51
 
52
- acts_as_solr({:if => false, :fields => [{:feed_id => :integer}, {:grain_size => :string}, {:tags => :string}]}, {:type_field => :type_s})
52
+ acts_as_solr({:if => false, :fields => [{:aggregation => :integer}, {:feed_id => :integer}, {:grain_size => :string}, {:tags => :string}]}, {:type_field => :type_s})
53
53
 
54
54
  def resource_uri
55
55
  self.direct_link.nil? ? self.permalink : self.direct_link
@@ -61,7 +61,7 @@ class Entry < ActiveRecord::Base
61
61
 
62
62
  def self.search(search_terms, grain_size = nil, language = "en", limit = 10, offset = 0, operator = :or)
63
63
  raise MuckServices::Exceptions::LanguageNotSupported, I18n.t('muck.services.language_not_supported') unless Recommender::Languages.supported_languages.include?(language)
64
- query = (!grain_size.nil? && grain_size != 'all') ? (search_terms + ") AND (grain_size:#{grain_size}") : search_terms
64
+ query = ((!grain_size.nil? && grain_size != 'all') ? (search_terms + ") AND (grain_size:#{grain_size}") : search_terms) + ") AND (aggregation:#{Aggregation.global_feeds_id}"
65
65
  return find_by_solr(query, :limit => limit, :offset => offset, :scores => true,
66
66
  :select => "entries.id, entries.title, entries.permalink, entries.direct_link, entries.published_at, entries.description, entries.feed_id, feeds.short_title AS collection",
67
67
  :joins => "INNER JOIN feeds ON feeds.id = entries.feed_id", :core => language, :operator => operator)
@@ -0,0 +1,3 @@
1
+ class PersonalRecommendation < ActiveRecord::Base
2
+ belongs_to :entry, :foreign_key => 'destination_id', :conditions => [:destination_type => 'Entry']
3
+ end
@@ -1,6 +1,6 @@
1
1
  <% link = visit_path(result) %>
2
2
  <p>
3
- <%= link_to result.title + " (" + result.collection + ")", link, :class => "title_link", :rel => "nofollow" %>
3
+ <%= link_to result.title + " (" + (result.collection.nil? ? result.feed_id.to_s : result.collection) + ")", link, :class => "title_link", :rel => "nofollow" %>
4
4
  - <%= link_to t('muck.services.related_resources'), resource_path(result), :class => "related_resources_link", :rel => "nofollow" %>
5
5
  <% if !result.direct_link.nil? %> - <%= link_to t('muck.services.metadata'), result.permalink, :class => "catalog_link" %><% end %>
6
6
  <% if result.description.length > 0 %><br/><span class="description"><%= truncate_words(result.description) %></span><% end %>
@@ -3,6 +3,7 @@
3
3
  <% custom_form_for(:feed, :url => polymorphic_url([@parent, :feeds])) do |f| -%>
4
4
  <%= f.text_field :uri, { :label => t('muck.services.add_feed_url' ) } %>
5
5
  <%= f.text_field :title, { :label => t('muck.services.title' ) } %>
6
+ <%= hidden_field_tag :layout, params[:layout] %>
6
7
  <div class="button form-row">
7
8
  <%= submit_tag t('muck.services.add_feed'), :id => 'add_feed_uri' %>
8
9
  <span id="finding_uri_message" style="display:none;">
@@ -3,7 +3,7 @@
3
3
  <ul id="add_oai_rss_feed_menu">
4
4
  <li><a id="add_rss" href="#"><%= t('muck.services.add_rss') %></a></li>
5
5
  <li><a id="add_oai" href="#"><%= t('muck.services.add_oai') %></a></li>
6
- <ul>
6
+ </ul>
7
7
 
8
8
  <div id="rss" class="add_data_container">
9
9
  <h1><%= t('muck.services.add_rss_feed') %></h1>
@@ -14,7 +14,7 @@
14
14
  <%= f.muck_services_language_select :default_language_id %>
15
15
  <%= f.hidden_field :service_id %>
16
16
  <%= hidden_field_tag :new_template, 'feeds/new_oai_rss' %>
17
- <%= hidden_field_tag :layout, 'popup' %>
17
+ <%= hidden_field_tag :layout, params[:layout] %>
18
18
  <div class="button form-row">
19
19
  <%= submit_tag t('muck.services.add_feed'), :id => 'add_feed_uri' %>
20
20
  <span id="finding_uri_message" style="display:none;">
@@ -0,0 +1,5 @@
1
+ <ul>
2
+ <% recommendations.each do |r| %>
3
+ <li><%= r.title %></li>
4
+ <% end %>
5
+ </ul>
@@ -17,6 +17,7 @@
17
17
  jQuery('.close_link').click(function(){
18
18
  jQuery('.tool').hide();
19
19
  jQuery("#content_iframe").width('100%');
20
+ jQuery('#recs_panel').css("left", jQuery("#toolbar").width() - 252);
20
21
  return false;
21
22
  });
22
23
  setup_entry_comment_submit();
@@ -0,0 +1,12 @@
1
+ <div id="recs_panel">
2
+ <h3 id="recs_header"><%= t('muck.services.gm_title') %></h3>
3
+ <ul id="recs_list">
4
+ <% @recommendations.each_with_index do |r, i| %>
5
+ <li <%= i%2 == 0 ? 'class="even"' : ''%>><%= link_to "#{r.title} (#{r.collection})", visit_path(r.dest_entry_id) %></li>
6
+ <% end %>
7
+ </ul>
8
+ <div id="more_recs"><%= link_to t('muck.services.gm_more_prompt'), resource_path(@entry) %></div>
9
+ </div>
10
+ <script type="text/javascript">
11
+ initRecsPanel();
12
+ </script>
@@ -13,6 +13,7 @@
13
13
  <% end -%>
14
14
  </div>
15
15
  <div id="tools" class="section">
16
+ <%= link_to t('muck.services.show_related_resources'), '#', :style => "display:none", :id => "show_recommendations_link", :onclick => 'jQuery("#recs_panel").show();jQuery("#show_recommendations_link").hide();return false;' %>
16
17
  <%#= link_to t('muck.services.remix'), new_content_path(@entry), :id => 'share' - copy the page into the content system %>
17
18
  <%#= link_to t('muck.services.save'), new_content_path(@entry), :id => 'share' - save the content for use later on %>
18
19
  <% if logged_in? -%>
@@ -1,6 +1,7 @@
1
1
  <%= render :partial => 'visits/toolbar' %>
2
2
  <%= render :partial => 'visits/comments_tool' %>
3
3
  <%= render :partial => 'visits/share_tool' %>
4
+ <%= render :partial => 'visits/recommendations' %>
4
5
  <div id="frame_content" class="framed_content">
5
6
  <iframe id="content_iframe" class="framed_content" name="iframe" src="<%= @resource_uri %>" frameborder="0" scrolling="auto" noresize="noresize"></iframe>
6
7
  </div>
@@ -0,0 +1,9 @@
1
+ class AddAggregationsForPersonalRecs < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :aggregation_feeds, :feed_type, :string
4
+ end
5
+
6
+ def self.down
7
+ remove_column :aggregation_feeds, :feed_type
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ class RenameActionTable < ActiveRecord::Migration
2
+ def self.up
3
+ rename_table :action_types, :attention_types
4
+ rename_column :attention_types, :action_type, :name
5
+ rename_column :attention_types, :weight, :default_weight
6
+
7
+ change_column :attentions, :attentionable_type, :string, :default => 'User'
8
+ rename_column :attentions, :action_type, :attention_type_id
9
+ change_column :attentions, :attention_type_id, :integer
10
+ change_column :attentions, :weight, :integer, :default => 5
11
+ add_column :attentions, :created_at, :datetime
12
+ add_index :attentions, :attention_type_id
13
+ add_index :attentions, :entry_id
14
+
15
+ remove_column :personal_recommendations, :rank
16
+ add_column :personal_recommendations, :created_at, :datetime
17
+ add_column :personal_recommendations, :visited_at, :datetime
18
+ add_index :personal_recommendations, :personal_recommendable_id
19
+ end
20
+
21
+ def self.down
22
+ remove_index :personal_recommendations, :personal_recommendable_id
23
+ remove_column :personal_recommendations, :visited_at
24
+ remove_column :personal_recommendations, :created_at
25
+ add_column :personal_recommendations, :rank, :integer
26
+
27
+ remove_index :attentions, :entry_id
28
+ remove_index :attentions, :attention_type_id
29
+ remove_column :attentions, :created_at
30
+ change_column :attentions, :weight, :float
31
+ change_column :attentions, :attention_type_id, :string
32
+ rename_column :attentions, :attention_type_id, :action_type
33
+
34
+ rename_column :attention_types, :default_weight, :weight
35
+ rename_column :attention_types, :name, :action_type
36
+ rename_table :attention_types, :action_types
37
+ end
38
+ end
@@ -87,6 +87,31 @@ module MuckServices
87
87
  system "rsync -ruv #{path}/public ."
88
88
  end
89
89
 
90
+ desc "Create global_feeds aggregation and add feeds to it"
91
+ task :create_global_feeds => :environment do
92
+ admin_id = User.find_by_login('admin').id
93
+ global_aggregation = Aggregation.create(:title => 'global_feeds', :terms => 'global_feeds',
94
+ :description => 'Feeds included in the site indexes.',
95
+ :ownable_id => admin_id, :ownable_type => 'User')
96
+ global_aggregation = Aggregation.find_by_title('global_feeds')
97
+ global_aggregation.feeds << Feed.find(:all, :conditions => "uri LIKE 'http://www.oercommons.org%' OR id < 1047364815")
98
+ global_aggregation.save!
99
+ AggregationFeed.update_all("feed_type = 'Feed'")
100
+ OaiEndpoint.find(:all).each do |ep|
101
+ AggregationFeed.create(:aggregation_id => global_aggregation.id, :feed_type => 'OaiEndpoint', :feed_id => ep.id)
102
+ end
103
+ end
104
+
105
+ desc "Add attention types"
106
+ task :add_attention_types => :environment do
107
+ AttentionType.create(:id => AttentionType::WRITE, :name => 'write', :default_weight => 10)
108
+ AttentionType.create(:id => AttentionType::BOOKMARK, :name => 'bookmark', :default_weight => 5)
109
+ AttentionType.create(:id => AttentionType::SEARCH, :name => 'search', :default_weight => 3)
110
+ AttentionType.create(:id => AttentionType::CLICK, :name => 'click', :default_weight => 4)
111
+ AttentionType.create(:id => AttentionType::SHARE, :name => 'share', :default_weight => 6)
112
+ AttentionType.create(:id => AttentionType::DISCUSS, :name => 'discuss', :default_weight => 7)
113
+ end
114
+
90
115
  end
91
116
 
92
117
  end
data/locales/en.yml CHANGED
@@ -3,6 +3,7 @@ en:
3
3
  activity_templates:
4
4
  entry_comment: Comment
5
5
  services:
6
+ add_new_feed_title: "Add a new feed"
6
7
  no_tags: "No tags available yet"
7
8
  collections: Collections
8
9
  demo: Demo
@@ -25,6 +26,7 @@ en:
25
26
  related_resources: related
26
27
  rss: RSS
27
28
  xml: XML
29
+ personal_recommendations: Recommendations
28
30
  atom: Atom
29
31
  rdf: RDF
30
32
  related_resources_title: Related Resources
@@ -32,6 +34,7 @@ en:
32
34
  details: Details
33
35
  gm_title: Related Resources
34
36
  gm_more_prompt: More Related Resources
37
+ show_related_resources: Show Related Resources
35
38
  direct_link: '[direct link]'
36
39
  search: search
37
40
  search_link: Find Resources!
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{muck-services}
8
- s.version = "0.1.12"
8
+ s.version = "0.1.13"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joel Duffin", "Justin Ball"]
12
- s.date = %q{2009-11-14}
12
+ s.date = %q{2009-11-17}
13
13
  s.description = %q{This gem contains the rails specific code for dealing with feeds, aggregations and recommendations. It is meant to work with the muck-raker gem.}
14
14
  s.email = %q{justin@tatemae.com}
15
15
  s.extra_rdoc_files = [
@@ -42,12 +42,14 @@ Gem::Specification.new do |s|
42
42
  "app/models/aggregation.rb",
43
43
  "app/models/aggregation_feed.rb",
44
44
  "app/models/attention.rb",
45
+ "app/models/attention_type.rb",
45
46
  "app/models/click.rb",
46
47
  "app/models/entry.rb",
47
48
  "app/models/feed.rb",
48
49
  "app/models/feed_parent.rb",
49
50
  "app/models/identity_feed.rb",
50
51
  "app/models/oai_endpoint.rb",
52
+ "app/models/personal_recommendation.rb",
51
53
  "app/models/recommendation.rb",
52
54
  "app/models/service.rb",
53
55
  "app/models/service_category.rb",
@@ -138,6 +140,7 @@ Gem::Specification.new do |s|
138
140
  "app/views/service_templates/_zotero_group.html.erb",
139
141
  "app/views/services/_edit_service.html.erb",
140
142
  "app/views/services/_new_service.html.erb",
143
+ "app/views/services/_personal_recommendations.html.erb",
141
144
  "app/views/services/_summary.html.erb",
142
145
  "app/views/services/_view_service.html.erb",
143
146
  "app/views/services_mailer/notification_feed_added.text.ar.html.erb",
@@ -329,6 +332,7 @@ Gem::Specification.new do |s|
329
332
  "app/views/topics/videos.html.erb",
330
333
  "app/views/visits/_comments_tool.html.erb",
331
334
  "app/views/visits/_frame_scripts.html.erb",
335
+ "app/views/visits/_recommendations.html.erb",
332
336
  "app/views/visits/_share_tool.html.erb",
333
337
  "app/views/visits/_toolbar.html.erb",
334
338
  "app/views/visits/show.html.erb",
@@ -365,6 +369,8 @@ Gem::Specification.new do |s|
365
369
  "db/migrate/20090924200750_add_uri_data_template_to_services.rb",
366
370
  "db/migrate/20091006183742_add_feed_count_to_aggregation.rb",
367
371
  "db/migrate/20091022150615_add_uri_key_to_services.rb",
372
+ "db/migrate/20091115011828_add_aggregations_for_personal_recs.rb",
373
+ "db/migrate/20091116094447_rename_action_table.rb",
368
374
  "lib/active_record/acts/muck_aggregation_owner.rb",
369
375
  "lib/active_record/acts/muck_feed_owner.rb",
370
376
  "lib/active_record/acts/muck_feed_parent.rb",
@@ -688,12 +694,13 @@ Gem::Specification.new do |s|
688
694
  "public/javascripts/muck_services.js",
689
695
  "public/javascripts/recommenderextension.user.js",
690
696
  "public/stylesheets/frame.css",
691
- "public/stylesheets/muck_services.css",
697
+ "public/stylesheets/muck-services.css",
692
698
  "rails/init.rb"
693
699
  ]
694
700
  s.homepage = %q{http://github.com/tatemae/muck-services}
695
701
  s.rdoc_options = ["--charset=UTF-8"]
696
702
  s.require_paths = ["lib"]
703
+ s.rubyforge_project = %q{muck-services}
697
704
  s.rubygems_version = %q{1.3.5}
698
705
  s.summary = %q{Feeds, aggregations and services for muck}
699
706
  s.test_files = [
@@ -2,7 +2,7 @@ function apply_show_entry_content(){
2
2
  jQuery('.combined-feed-list .feed-item .feed-title').hover(
3
3
  function () {
4
4
  jQuery(this).next('.combined-feed-list .feed-item .feed-content').show();
5
- },
5
+ },
6
6
  function () {
7
7
  jQuery(this).next('.combined-feed-list .feed-item .feed-content').hide();
8
8
  }
@@ -10,7 +10,7 @@ function apply_show_entry_content(){
10
10
  jQuery('.combined-feed-list .feed-item .feed-content').hover(
11
11
  function () {
12
12
  jQuery(this).show();
13
- },
13
+ },
14
14
  function () {
15
15
  jQuery(this).hide();
16
16
  }
@@ -19,8 +19,9 @@ function apply_show_entry_content(){
19
19
 
20
20
  function show_tool(tool) {
21
21
  jQuery('.tool').hide();
22
- jQuery("#content_iframe").width('75%');
22
+ jQuery('#content_iframe').width('75%');
23
23
  jQuery('#' + tool + '_tool').show();
24
+ jQuery('#recs_panel').css("left", jQuery("#content_iframe").width() - 252);
24
25
  maximize_space();
25
26
  return false;
26
27
  }
@@ -58,7 +59,7 @@ function setup_entry_comment_submit(){
58
59
  }
59
60
  function apply_frame_comment_hover(){
60
61
  jQuery('.comment_holder').hover(
61
- function () { jQuery(this).addClass('comment-hover'); },
62
+ function () { jQuery(this).addClass('comment-hover'); },
62
63
  function () { jQuery(this).removeClass('comment-hover'); } );
63
64
  }
64
65
  function setup_share_submit(){
@@ -91,4 +92,13 @@ jQuery(document).ready(function() {
91
92
  function maximize_iframe_height() {
92
93
  var frame = jQuery("#content_iframe");
93
94
  frame.height(jQuery(window).height() - jQuery('#toolbar').height());
95
+ jQuery('#recs_panel').css("left", jQuery("#content_iframe").width() - 252);
96
+ }
97
+
98
+ function initRecsPanel() {
99
+ var panel = jQuery("#recs_panel");
100
+ panel.append("<div id='rec_close_box' title='Close'>x</div>");
101
+ jQuery("#rec_close_box").click(function() {jQuery("#recs_panel").hide();jQuery("#show_recommendations_link").show();return false;});
102
+ panel.css("left", jQuery("#toolbar").width() - 250);
103
+ panel.draggable();
94
104
  }
@@ -88,3 +88,18 @@ ul.google-trends{margin:0;padding:0;list-style:none;}
88
88
  .search-container .gsc-control{width:100%;}
89
89
  /* edit aggregation */
90
90
  #edit-aggregation-controls .box{margin:10px 0;}
91
+
92
+ #add_oai_rss_feed{margin:50px auto 300px auto;width:340px;}
93
+ ul#add_oai_rss_feed_menu{list-style:none;}
94
+ ul#add_oai_rss_feed_menu li{display:inline;margin:0 5px;}
95
+
96
+ /* recommender panel */
97
+ #recs_panel{position:absolute;top:30px;width:250px;background-color:white;border:1px solid #999;}
98
+ #recs_header{color:#777;background-color:white;font-weight:bold;font-size:16px;font-family:Arial,Helvetica,sans-serif;margin: 2px 3px 0 3px; padding: 2px;}
99
+ #recs_list{margin: 1px; padding: 1px; list-style-type: none;}
100
+ #recs_list li{margin-left: 0px; padding: 3px; list-style-type: none; font-size: 12px;}
101
+ .even{background-color:#E6E6E6;}
102
+ #more_recs{margin:4px 0 6px;padding:0;text-align:center;}
103
+ #recs_panel a{color:#3987DC;text-decoration:none;}
104
+ #recs_panel a:hover{text-decoration:underline;}
105
+ #rec_close_box {margin:3px; position:absolute; top:0px; right:0px; font-family:arial,sans-serif;padding:1px; width:16px; border:1px solid #BBBBBB; text-align:center; cursor:pointer; color:#BBB; font-size:10px; background-color:#fff; font-weight:bold; z-index:999;}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muck-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Duffin
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-11-14 00:00:00 -07:00
13
+ date: 2009-11-17 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -168,12 +168,14 @@ files:
168
168
  - app/models/aggregation.rb
169
169
  - app/models/aggregation_feed.rb
170
170
  - app/models/attention.rb
171
+ - app/models/attention_type.rb
171
172
  - app/models/click.rb
172
173
  - app/models/entry.rb
173
174
  - app/models/feed.rb
174
175
  - app/models/feed_parent.rb
175
176
  - app/models/identity_feed.rb
176
177
  - app/models/oai_endpoint.rb
178
+ - app/models/personal_recommendation.rb
177
179
  - app/models/recommendation.rb
178
180
  - app/models/service.rb
179
181
  - app/models/service_category.rb
@@ -264,6 +266,7 @@ files:
264
266
  - app/views/service_templates/_zotero_group.html.erb
265
267
  - app/views/services/_edit_service.html.erb
266
268
  - app/views/services/_new_service.html.erb
269
+ - app/views/services/_personal_recommendations.html.erb
267
270
  - app/views/services/_summary.html.erb
268
271
  - app/views/services/_view_service.html.erb
269
272
  - app/views/services_mailer/notification_feed_added.text.ar.html.erb
@@ -455,6 +458,7 @@ files:
455
458
  - app/views/topics/videos.html.erb
456
459
  - app/views/visits/_comments_tool.html.erb
457
460
  - app/views/visits/_frame_scripts.html.erb
461
+ - app/views/visits/_recommendations.html.erb
458
462
  - app/views/visits/_share_tool.html.erb
459
463
  - app/views/visits/_toolbar.html.erb
460
464
  - app/views/visits/show.html.erb
@@ -491,6 +495,8 @@ files:
491
495
  - db/migrate/20090924200750_add_uri_data_template_to_services.rb
492
496
  - db/migrate/20091006183742_add_feed_count_to_aggregation.rb
493
497
  - db/migrate/20091022150615_add_uri_key_to_services.rb
498
+ - db/migrate/20091115011828_add_aggregations_for_personal_recs.rb
499
+ - db/migrate/20091116094447_rename_action_table.rb
494
500
  - lib/active_record/acts/muck_aggregation_owner.rb
495
501
  - lib/active_record/acts/muck_feed_owner.rb
496
502
  - lib/active_record/acts/muck_feed_parent.rb
@@ -814,7 +820,7 @@ files:
814
820
  - public/javascripts/muck_services.js
815
821
  - public/javascripts/recommenderextension.user.js
816
822
  - public/stylesheets/frame.css
817
- - public/stylesheets/muck_services.css
823
+ - public/stylesheets/muck-services.css
818
824
  - rails/init.rb
819
825
  has_rdoc: true
820
826
  homepage: http://github.com/tatemae/muck-services
@@ -839,7 +845,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
839
845
  version:
840
846
  requirements: []
841
847
 
842
- rubyforge_project:
848
+ rubyforge_project: muck-services
843
849
  rubygems_version: 1.3.5
844
850
  signing_key:
845
851
  specification_version: 3