muck-services 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
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