muck-services 3.1.1 → 3.2.0

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 (33) hide show
  1. data/VERSION +1 -1
  2. data/app/controllers/muck/identity_feeds_controller.rb +28 -27
  3. data/app/helpers/muck_services_service_helper.rb +22 -0
  4. data/app/models/service.rb +1 -1
  5. data/app/views/identity_feeds/{_available_service_categories.html.erb → _available_service_categories.erb} +0 -0
  6. data/app/views/identity_feeds/_form.erb +11 -5
  7. data/app/views/identity_feeds/_services_for_user.erb +11 -0
  8. data/app/views/identity_feeds/create.erb +10 -0
  9. data/app/views/identity_feeds/destroy.erb +1 -0
  10. data/app/views/identity_feeds/{edit.html.erb → edit.erb} +0 -0
  11. data/app/views/identity_feeds/index.erb +49 -0
  12. data/app/views/identity_feeds/{new.html.erb → new.erb} +0 -0
  13. data/app/views/service_templates/{_facebook.html.erb → _facebook.erb} +1 -1
  14. data/app/views/service_templates/{_friendfeed.html.erb → _friendfeed.erb} +1 -1
  15. data/app/views/service_templates/{_goodreads.html.erb → _goodreads.erb} +0 -0
  16. data/app/views/service_templates/{_linkedin.html.erb → _linkedin.erb} +1 -1
  17. data/app/views/service_templates/{_netflix.html.erb → _netflix.erb} +1 -1
  18. data/app/views/service_templates/{_polyvore.html.erb → _polyvore.erb} +0 -0
  19. data/app/views/service_templates/{_zotero_group.html.erb → _zotero_group.erb} +0 -0
  20. data/app/views/services/{_edit_service.html.erb → _edit_service.erb} +0 -0
  21. data/app/views/services/{_new_service.html.erb → _new_service.erb} +0 -0
  22. data/app/views/services/{_personal_recommendations.html.erb → _personal_recommendations.erb} +0 -0
  23. data/app/views/services/{_summary.html.erb → _summary.erb} +0 -0
  24. data/app/views/services/{_view_service.html.erb → _view_service.erb} +0 -0
  25. data/config/locales/en.yml +10 -10
  26. data/db/bootstrap/services.yml +2 -2
  27. data/muck-services.gemspec +22 -19
  28. data/public/javascripts/muck_services-src.js +134 -0
  29. data/public/javascripts/muck_services.js +10 -104
  30. data/public/stylesheets/muck-services.css +1 -0
  31. metadata +25 -22
  32. data/app/views/identity_feeds/_services_for_user.html.erb +0 -25
  33. data/app/views/identity_feeds/index.html.erb +0 -32
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.1
1
+ 3.2.0
@@ -22,43 +22,51 @@ class Muck::IdentityFeedsController < ApplicationController
22
22
  @feed = Feed.new
23
23
  respond_to do |format|
24
24
  format.html { render :template => 'identity_feeds/new' }
25
- format.pjs { render :text => get_new_html(@service, @parent, @feed) }
25
+ format.js { render :template => 'identity_feeds/new', :layout => false }
26
+ format.pjs { render :template => 'identity_feeds/new', :layout => false }
26
27
  end
27
28
  end
28
29
 
29
30
  def create
30
31
  @service = Service.find(params[:service_id])
32
+
31
33
  if !params[:uri].blank?
32
- @feed = Feed.new(:uri => params[:uri], :login => params[:username])
33
- feeds = Service.create_tag_feeds_for_service(@service, params[:uri], params[:username], params[:password], current_user.id)
34
+ uri = params[:uri]
35
+ elsif !@service.uri_data_template.blank? && params[:username]
36
+ uri = @service.uri_data_template
37
+ else
38
+ uri = nil
39
+ end
40
+
41
+ if uri
42
+ @feed = Feed.new(:uri => uri, :login => params[:username])
43
+ feeds = Service.create_tag_feeds_for_service(@service, uri, params[:username], params[:password], current_user.id)
34
44
  if feeds.blank?
35
- success = false
45
+ @success = false
36
46
  if params[:username]
37
- message = I18n.t('muck.services.no_feeds_from_username')
47
+ @message = I18n.t('muck.services.no_feeds_from_username')
38
48
  else
39
- message = I18n.t('muck.services.no_feeds_at_uri')
49
+ @message = I18n.t('muck.services.no_feeds_at_uri')
40
50
  end
41
51
  else
42
- success, messages = add_feeds_to_parent(@parent, feeds)
43
- message = messages.join('<br />')
52
+ @success, messages = add_feeds_to_parent(@parent, feeds)
53
+ @message = messages.join('<br />')
44
54
  end
45
55
  else
46
- success = false
47
- message = I18n.t('muck.services.please_specify_url')
56
+ @success = false
57
+ @message = I18n.t('muck.services.please_specify_url')
48
58
  end
49
59
 
60
+ @user_services = @parent.identity_feeds.find(:all, :include => [{:feed => :service}]) if @success
61
+
50
62
  respond_to do |format|
51
63
  format.html do
52
- flash[:notice] = message if message
64
+ flash[:notice] = @message.html_safe if @message
53
65
  redirect_to polymorphic_url([@parent, :identity_feeds])
54
66
  end
55
- format.pjs do
56
- flash[:notice] = message if message
57
- render :template => 'identity_feeds/new', :layout => false
58
- end
59
- format.json do
60
- render :json => {:parent => @parent, :service => @service, :feeds => feeds, :success => success, :message => message }.as_json
61
- end
67
+ format.pjs { render :template => 'identity_feeds/create', :layout => false }
68
+ format.js { render :template => 'identity_feeds/create', :layout => false }
69
+ format.json { render :json => {:parent => @parent, :service => @service, :feeds => feeds, :success => @success, :message => @message }.as_json }
62
70
  end
63
71
  end
64
72
 
@@ -82,11 +90,8 @@ class Muck::IdentityFeedsController < ApplicationController
82
90
  flash[:notice] = t("muck.services.identity_feed_removed")
83
91
  redirect_to polymorphic_url([@identity_feed.ownable, :identity_feeds])
84
92
  end
85
- format.js do
86
- render(:update) do |page|
87
- page << "jQuery('##{@identity_feed.dom_id}').fadeOut();"
88
- end
89
- end
93
+ format.js { render :template => 'identity_feeds/destroy', :layout => false }
94
+ format.pjs { render :template => 'identity_feeds/destroy', :layout => false }
90
95
  format.json do
91
96
  render :json => { :success => true,
92
97
  :identity_feed => @identity_feed,
@@ -122,10 +127,6 @@ class Muck::IdentityFeedsController < ApplicationController
122
127
  @parent.can_edit?(current_user)
123
128
  end
124
129
 
125
- def get_new_html(service, parent, feed)
126
- render_to_string(:partial => 'identity_feeds/form', :locals => { :service => service, :parent => parent, :feed => feed })
127
- end
128
-
129
130
  def get_edit_html(identity_feed)
130
131
  render_to_string(:partial => 'identity_feeds/form', :locals => { :service => identity_feed.feed.service, :parent => identity_feed.ownable, :feed => identity_feed.feed })
131
132
  end
@@ -71,12 +71,19 @@ module MuckServicesServiceHelper
71
71
  service_link(path, identity_feed.feed.service, link_css, wrapper, link_text)
72
72
  end
73
73
 
74
+ # Renders a link with an icon and text
74
75
  def service_external_link(identity_feed, link_css = nil, wrapper = nil)
75
76
  path = identity_feed.feed.display_uri || identity_feed.feed.uri
76
77
  link_text = identity_feed.feed.title unless identity_feed.feed.title.blank?
77
78
  service_link(path, identity_feed.feed.service, link_css, wrapper, link_text, 'blank')
78
79
  end
79
80
 
81
+ # Render a link with an icon an no text
82
+ def service_external_icon_link(identity_feed, link_css = nil, wrapper = nil, target = 'blank', id = nil)
83
+ path = identity_feed.feed.display_uri || identity_feed.feed.uri
84
+ service_icon_link(path, identity_feed.feed.service, link_css, wrapper, target, id)
85
+ end
86
+
80
87
  # Renders a delete button for an identity_feed
81
88
  def service_delete(identity_feed, button_type = :button, button_text = t("muck.general.delete"))
82
89
  render(:partial => 'shared/delete', :locals => { :delete_object => identity_feed,
@@ -96,6 +103,21 @@ module MuckServicesServiceHelper
96
103
  end
97
104
  end
98
105
 
106
+ # Renders a service link optionally wrapping it in the specified element
107
+ def service_icon_link(path, service, link_css, wrapper, target = nil, id = nil)
108
+ if service.respond_to?(:icon)
109
+ service_name = service.icon
110
+ else
111
+ service_name = "#{service}.png"
112
+ end
113
+ link = %Q{<a #{'id=' + id if id} href="#{path}" #{'target=' + target if target} class="service-link #{link_css}">#{service_icon(service_name, 16, service.name)}</a>}.html_safe
114
+ if wrapper
115
+ content_tag(wrapper, link, :class => 'identity-service').html_safe
116
+ else
117
+ link
118
+ end
119
+ end
120
+
99
121
  def url_by_identity_feed(owner, identity_feed, service)
100
122
  if identity_feed
101
123
  polymorphic_url([owner, identity_feed], :service_id => service.to_param).html_safe
@@ -156,7 +156,7 @@ class Service < ActiveRecord::Base
156
156
  # creates a feed for a service with a username and optional password
157
157
  def self.create_tag_feeds_for_service(service, uri, username, password, contributor)
158
158
  uris = service.generate_uris(username, password, uri)
159
- uris.collect{ |u| Feed.find_or_create(u.url, u.title, username, password, service.id, contributor) } if uris
159
+ uris.collect{ |u| Feed.find_or_create(u.url, u.title, username, password, service.id, contributor, u.human_url) } if uris
160
160
  end
161
161
 
162
162
  def self.build_photo_feeds(terms, user, service_ids = nil, refresh_services = false)
@@ -1,5 +1,6 @@
1
+ <div id="identity-feed-message"></div>
1
2
  <div id="identity-feed">
2
- <%= form_for(:feed, :url => url_by_identity_feed(parent, @identity_feed, service)) do |f| -%>
3
+ <%= form_for(:feed, :url => url_by_identity_feed(parent, @identity_feed, service), :html => { :class => 'add-identity' } ) do |f| -%>
3
4
  <%= service_title(service) %>
4
5
  <% if service.template.blank? -%>
5
6
  <% if service.uri_data_template.blank? -%>
@@ -11,10 +12,15 @@
11
12
  <%= render :partial => "service_templates/#{service.template}", :locals => { :service => service, :feed => feed } -%>
12
13
  <% end -%>
13
14
  <div class="button form-row">
14
- <%= f.submit t('muck.services.import_service', :service => service.name), :id => 'submit_feed', :onclick => "jQuery('#submit_feed').hide();jQuery('#finding_uri_message').show();" %>
15
- <span id="finding_uri_message" style="display:none;">
16
- <%= t('muck.services.submitting_feed_message') %><img src="/images/spinner.gif" alt="<%= t('muck.services.loading_content_image') %>" />
15
+ <%= f.submit t('muck.services.import_service', :service => service.name), :id => 'submit_add_feed' %>
16
+ <span id="finding_uri_message" class="waiting" style="display:none;">
17
+ <%= t('muck.services.submitting_feed_message') %>
17
18
  </span>
18
19
  </div>
19
20
  <% end -%>
20
- </div>
21
+ </div>
22
+ <script type="text/javascript">
23
+ jQuery(document).ready(function() {
24
+ apply_add_feed();
25
+ });
26
+ </script>
@@ -0,0 +1,11 @@
1
+ <div id="my-services" class="services-main <%= css %>">
2
+ <h2><%= title || I18n.t('muck.services.my_services') %></h2>
3
+ <ul id="my-services-list" class="services-list">
4
+ <% if edit -%>
5
+ <%= render(:partial => 'services/edit_service', :collection => identity_feeds) %>
6
+ <% else -%>
7
+ <%= render(:partial => 'services/view_service', :collection => identity_feeds) %>
8
+ <% end -%>
9
+ </ul>
10
+ </div>
11
+
@@ -0,0 +1,10 @@
1
+ <% if @success -%>
2
+ jQuery('#my-services').replaceWith('<%= escape_javascript(services_for_user(@user_services, nil, 'span-5').html_safe) %>');
3
+ apply_delete_feed();
4
+ jQuery.fancybox.close();
5
+ <% else -%>
6
+ jQuery('#identity-feed-message').addClass('error');
7
+ jQuery('#identity-feed-message').html("<%=@message.html_safe%>");
8
+ jQuery('#submit_add_feed').show();
9
+ jQuery('#finding_uri_message').hide();
10
+ <% end -%>
@@ -0,0 +1 @@
1
+ jQuery('#<%=@identity_feed.dom_id%>').fadeOut();
@@ -0,0 +1,49 @@
1
+ <%= output_errors('', {:class => 'help-box'}) %>
2
+ <%= available_service_categories(@service_categories, nil, 'span-15') %>
3
+ <%= services_for_user(@user_services, nil, 'span-5') %>
4
+
5
+ <script type="text/javascript">
6
+ jQuery(document).ready(function() {
7
+ jQuery('a.lightbox').fancybox({
8
+ 'width': 400,
9
+ 'height': 100,
10
+ 'ajax' : {
11
+ dataType: 'html',
12
+ beforeSend: add_headers
13
+ }
14
+ });
15
+ jQuery('a#facebook-link').fancybox({
16
+ 'width': 400,
17
+ 'height': 375,
18
+ 'ajax' : {
19
+ dataType: 'html',
20
+ beforeSend: add_headers
21
+ }
22
+ });
23
+ jQuery('a#zotero-groups-link').fancybox({
24
+ 'width': 400,
25
+ 'height': 130,
26
+ 'ajax' : {
27
+ dataType: 'html',
28
+ beforeSend: add_headers
29
+ }
30
+ });
31
+ jQuery('a#netflix-link').fancybox({
32
+ 'width': 400,
33
+ 'height': 160,
34
+ 'ajax' : {
35
+ dataType: 'html',
36
+ beforeSend: add_headers
37
+ }
38
+ });
39
+ });
40
+ </script>
41
+
42
+ <script type="text/javascript">
43
+ jQuery(document).ready(function() {
44
+ //apply_delete_hover();
45
+ apply_delete_feed();
46
+ });
47
+ </script>
48
+
49
+
File without changes
@@ -1,4 +1,4 @@
1
1
  <%= text_field_tag :uri, feed.uri %>
2
- <p><%= t('muck.services.facebook_link', :link => '<a href="http://www.facebook.com/posted.php" target="blank">Click Here</a>') %></p>
2
+ <p><%= t('muck.services.facebook_link', :link => '<a href="http://www.facebook.com/posted.php" target="blank">Click Here</a>').html_safe %></p>
3
3
  <img src="/images/service_icons/facebook_my_links.jpg" />
4
4
  <p><%= t('muck.services.facebook_instructions') %></p>
@@ -1,2 +1,2 @@
1
1
  <%= text_field_tag :uri, feed.uri %>
2
- <%= t('muck.services.friendfeed_rss', :link => '<a href="http://friendfeed.com/">Friendfeed home page</a>') %>
2
+ <%= t('muck.services.friendfeed_rss', :link => '<a href="http://friendfeed.com/" target="_blank">Friendfeed home page</a>').html_safe %>
@@ -1,2 +1,2 @@
1
1
  <%= text_field_tag :uri, feed.uri %>
2
- <%= t('muck.services.linkedin_rss', :link => '<a href="http://www.linkedin.com/myprofile?editwp=">LinkedIn Public Profile page</a>') %>
2
+ <%= t('muck.services.linkedin_rss', :link => '<a href="http://www.linkedin.com/myprofile?editwp=" target="_blank">LinkedIn Public Profile page</a>').html_safe %>
@@ -1,2 +1,2 @@
1
1
  <%= text_field_tag :uri, feed.uri %>
2
- <%= t('muck.services.netflix_rss', :link => '<a href="http://www.netflix.com/RSSFeeds">Netflix Queue RSS page</a>') %>
2
+ <%= t('muck.services.netflix_rss', :link => '<a href="http://www.netflix.com/RSSFeeds" target="_blank">Netflix Queue RSS page</a>').html_safe %>
@@ -50,7 +50,7 @@ en:
50
50
  rss: RSS
51
51
  validate_feed: Mark feed as valid
52
52
  discover_feed_message: Searching for information about the url you provided. Please wait.
53
- service_feed_name: "%{term}} on %{service}"
53
+ service_feed_name: "%{term} on %{service}"
54
54
  please_specify_url: Please specify a url
55
55
  available_sources: Available Sources
56
56
  import_service: Import %{service}
@@ -61,7 +61,7 @@ en:
61
61
  add_aggregation_title: "Name for aggregation:"
62
62
  back: Back
63
63
  polyvore_prompt: Polyvore profile URL
64
- login_or_signup_prompt: "%{signup}} or %{login} to discuss and share resources."
64
+ login_or_signup_prompt: "%{signup} or %{login} to discuss and share resources."
65
65
  facebook_shares: Facebook Shared Links
66
66
  facebook: Facebook
67
67
  for: for
@@ -70,18 +70,18 @@ en:
70
70
  loading_content_image: <%= t('muck.services.loading_image') %>
71
71
  save_aggreation: Save this Aggregation
72
72
  metadata: metadata
73
- signup_to_save_aggreation: "%{login}} or %{signup} to save this search"
73
+ signup_to_save_aggreation: "%{login} or %{signup} to save this search"
74
74
  visit: visit
75
75
  facebook_link: You can find your URL on your Facebook My Links page. %{link} and then click on 'My Links'
76
- course_search_results: Courses <b>%{first}} - %{last}}</b> of <b>%{total}}</b> for search <b>%{terms}</b>
76
+ course_search_results: Courses <b>%{first} - %{last}</b> of <b>%{total}</b> for search <b>%{terms}</b>
77
77
  only_courses: Only Courses
78
- no_hits: Your search - <b>%{search}}</b> - did not match any <b>%{resource_type}</b>. Please try a different search or choose a different language.
78
+ no_hits: Your search - <b>%{search}</b> - did not match any <b>%{resource_type}</b>. Please try a different search or choose a different language.
79
79
  no_recommendations: No recommendations were found.
80
80
  feed_successfully_created: Thank you for submitting a feed. You will be emailed when the feed is approved.
81
81
  login: Login
82
82
  next_label: Next
83
83
  add_rss: Add Rss
84
- already_added_username_feed: You've already added a %{service}} account with the username %{username}
84
+ already_added_username_feed: You've already added a %{service} account with the username %{username}
85
85
  topic_feeds_for: Feeds for %{terms}
86
86
  explore: Search the Web
87
87
  videos: Videos
@@ -98,7 +98,7 @@ en:
98
98
  loading_message: "Loading... "
99
99
  feed_successfully_updated: Feed was successfully updated.
100
100
  approval_status: Approved
101
- course_tag_results: Courses <b>%{first}} - %{last}}</b> of <b>%{total}}</b> tagged <b>%{terms}</b>
101
+ course_tag_results: Courses <b>%{first} - %{last}</b> of <b>%{total}</b> tagged <b>%{terms}</b>
102
102
  goodreads_prompt: Goodreads profile URL
103
103
  feed_remove: Feed Removed
104
104
  loading_image: Loading Image
@@ -123,7 +123,7 @@ en:
123
123
  oai_endpoint_successfully_created: Successfully added OAI endpoint
124
124
  add_extended_feed_title: Add new feed
125
125
  gm_title: Related Resources
126
- resource_tag_results: Resources <b>%{first}} - %{last}}</b> of <b>%{total}}</b> tagged <b>%{terms}</b>
126
+ resource_tag_results: Resources <b>%{first} - %{last}</b> of <b>%{total}</b> tagged <b>%{terms}</b>
127
127
  rdf: RDF
128
128
  amazon_prompt: Please enter the email you use with Amazon.com
129
129
  edit_aggregation_title: Editing %{title}
@@ -192,7 +192,7 @@ en:
192
192
  already_shared: You've previously shared this page.
193
193
  add_edit_feeds: Add/Edit Feeds
194
194
  harvest_interval: Harvest interval (hrs)
195
- resource_search_results: Resources <b>%{first}} - %{last}}</b> of <b>%{total}}</b> for search <b>%{terms}</b>
195
+ resource_search_results: Resources <b>%{first} - %{last}</b> of <b>%{total}</b> for search <b>%{terms}</b>
196
196
  successfully_added_uri_feed: Successfully added %{uri}
197
197
  no_feeds_found: No feeds were found
198
198
  direct_link: "[direct link]"
@@ -207,7 +207,7 @@ en:
207
207
  add_feed: Add Feed
208
208
  identity_feeds: Identity Feeds
209
209
  added_date: Added
210
- no_tagged_courses: No <b>courses</b> were found tagged with <b>%{tags}}</b>. <a href='/resources'>Start over</a> or show <a href='/resources/tags/%{tags}}'>all resources tagged %{tags}</a>.
210
+ no_tagged_courses: No <b>courses</b> were found tagged with <b>%{tags}</b>. <a href='/resources'>Start over</a> or show <a href='/resources/tags/%{tags}'>all resources tagged %{tags}</a>.
211
211
  personal_recommendations: Recommendations
212
212
  feed_id: ID
213
213
  repository_short_title: "Repository Short Title:"
@@ -317,7 +317,7 @@ pandora:
317
317
  icon: pandora.png
318
318
  use_for: "identity"
319
319
  service_category_id: 5
320
- active: true
320
+ active: false
321
321
  technorati_tags:
322
322
  id: 27
323
323
  sort: 27
@@ -719,7 +719,7 @@ amazon:
719
719
  icon: amazon.png
720
720
  use_for: "identity"
721
721
  service_category_id: 12
722
- active: true
722
+ active: false
723
723
  prompt: amazon_prompt
724
724
  twitter_tags:
725
725
  id: 59
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{muck-services}
8
- s.version = "3.1.1"
8
+ s.version = "3.2.0"
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{2011-01-28}
12
+ s.date = %q{2011-02-01}
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 = [
@@ -104,12 +104,14 @@ Gem::Specification.new do |s|
104
104
  "app/views/feeds/new_oai_rss.html.erb",
105
105
  "app/views/feeds/show.html.erb",
106
106
  "app/views/feeds/unban.html.erb",
107
- "app/views/identity_feeds/_available_service_categories.html.erb",
107
+ "app/views/identity_feeds/_available_service_categories.erb",
108
108
  "app/views/identity_feeds/_form.erb",
109
- "app/views/identity_feeds/_services_for_user.html.erb",
110
- "app/views/identity_feeds/edit.html.erb",
111
- "app/views/identity_feeds/index.html.erb",
112
- "app/views/identity_feeds/new.html.erb",
109
+ "app/views/identity_feeds/_services_for_user.erb",
110
+ "app/views/identity_feeds/create.erb",
111
+ "app/views/identity_feeds/destroy.erb",
112
+ "app/views/identity_feeds/edit.erb",
113
+ "app/views/identity_feeds/index.erb",
114
+ "app/views/identity_feeds/new.erb",
113
115
  "app/views/oai_endpoints/_form.html.erb",
114
116
  "app/views/oai_endpoints/_oai_endpoint_row.html.erb",
115
117
  "app/views/oai_endpoints/new.html.erb",
@@ -123,18 +125,18 @@ Gem::Specification.new do |s|
123
125
  "app/views/recommendations/index.rss.builder",
124
126
  "app/views/recommendations/index.xml.builder",
125
127
  "app/views/recommendations/real_time.html.erb",
126
- "app/views/service_templates/_facebook.html.erb",
127
- "app/views/service_templates/_friendfeed.html.erb",
128
- "app/views/service_templates/_goodreads.html.erb",
129
- "app/views/service_templates/_linkedin.html.erb",
130
- "app/views/service_templates/_netflix.html.erb",
131
- "app/views/service_templates/_polyvore.html.erb",
132
- "app/views/service_templates/_zotero_group.html.erb",
133
- "app/views/services/_edit_service.html.erb",
134
- "app/views/services/_new_service.html.erb",
135
- "app/views/services/_personal_recommendations.html.erb",
136
- "app/views/services/_summary.html.erb",
137
- "app/views/services/_view_service.html.erb",
128
+ "app/views/service_templates/_facebook.erb",
129
+ "app/views/service_templates/_friendfeed.erb",
130
+ "app/views/service_templates/_goodreads.erb",
131
+ "app/views/service_templates/_linkedin.erb",
132
+ "app/views/service_templates/_netflix.erb",
133
+ "app/views/service_templates/_polyvore.erb",
134
+ "app/views/service_templates/_zotero_group.erb",
135
+ "app/views/services/_edit_service.erb",
136
+ "app/views/services/_new_service.erb",
137
+ "app/views/services/_personal_recommendations.erb",
138
+ "app/views/services/_summary.erb",
139
+ "app/views/services/_view_service.erb",
138
140
  "app/views/services_mailer/notification_feed_added.html.erb",
139
141
  "app/views/services_mailer/notification_feed_added.text.erb",
140
142
  "app/views/services_mailer/notification_oai_endpoint_added.html.erb",
@@ -252,6 +254,7 @@ Gem::Specification.new do |s|
252
254
  "lib/muck-services/services.rb",
253
255
  "lib/tasks/muck_services.rake",
254
256
  "muck-services.gemspec",
257
+ "public/javascripts/muck_services-src.js",
255
258
  "public/javascripts/muck_services.js",
256
259
  "public/stylesheets/frame.css",
257
260
  "public/stylesheets/muck-services.css"
@@ -0,0 +1,134 @@
1
+ function apply_add_feed(){
2
+ jQuery('.add-identity').bind('submit', function(){
3
+ jQuery('#submit_add_feed').hide();
4
+ jQuery('#finding_uri_message').show();
5
+ jQuery(this).ajaxSubmit({
6
+ dataType: 'script',
7
+ beforeSend: add_headers
8
+ });
9
+ return false;
10
+ });
11
+ }
12
+
13
+ function apply_delete_feed(){
14
+ jQuery('.identity-feed-delete').bind('submit', function(){
15
+ jQuery(this).replaceWith(jQuery(jQuery('#muck_ajax_delete_control_message').html()).show());
16
+ jQuery(this).ajaxSubmit({
17
+ dataType: 'script',
18
+ beforeSend: add_headers
19
+ });
20
+ return false;
21
+ });
22
+ }
23
+
24
+ function apply_delete_hover(){
25
+ jQuery('ul#my-services-list li form').hide();
26
+ jQuery('ul#my-services-list li').hover(function(){
27
+ jQuery(this).children('form').show(); }, function(){
28
+ jQuery(this).children('form').hide(); });
29
+ }
30
+
31
+ function apply_show_entry_content(){
32
+ jQuery('.combined-feed-list .feed-item .feed-title').hover(
33
+ function () {
34
+ jQuery(this).next('.combined-feed-list .feed-item .feed-content').show();
35
+ },
36
+ function () {
37
+ jQuery(this).next('.combined-feed-list .feed-item .feed-content').hide();
38
+ }
39
+ );
40
+ jQuery('.combined-feed-list .feed-item .feed-content').hover(
41
+ function () {
42
+ jQuery(this).show();
43
+ },
44
+ function () {
45
+ jQuery(this).hide();
46
+ }
47
+ );
48
+ }
49
+
50
+ function show_tool(tool) {
51
+ jQuery('.tool').hide();
52
+ jQuery('#content_iframe').width('75%');
53
+ jQuery('#' + tool + '_tool').show();
54
+ jQuery('#recs_panel').css("left", jQuery("#content_iframe").width() - 252);
55
+ maximize_space();
56
+ return false;
57
+ }
58
+ function maximize_space() {
59
+ var container = jQuery(".tools_container");
60
+ var spacer = jQuery('#comments_tools_close_wrapper').height() + 5;
61
+ container.height(jQuery(window).height() - (jQuery('#toolbar').height() + spacer));
62
+ }
63
+ function setup_entry_comment_submit(){
64
+ jQuery(".entry-comment-submit").click(function() {
65
+ jQuery(this).siblings('textarea').hide();
66
+ jQuery(".entry-comment-submit").hide();
67
+ jQuery(this).parent().append('<p class="entry-comment-loading"><img src="/images/spinner.gif" alt="loading..." /> ' + ADD_COMMENT_MESSAGE + '</p>');
68
+ var form = jQuery(this).parents('form');
69
+ jQuery.post(form.attr('action'), form.serialize() + '&format=json',
70
+ function(data){
71
+ var json = eval('(' + data + ')');
72
+ if(!json.success){
73
+ jQuery.jGrowl.info(json.message);
74
+ } else {
75
+ jQuery('.entry-comment-loading').remove();
76
+ jQuery('#comments_tool').find('textarea').show();
77
+ jQuery('#comments_tool').find('textarea').val('');
78
+ jQuery(".entry-comment-submit").show();
79
+ jQuery("#comments_container").animate({ scrollTop: jQuery("#comments_tool").attr("scrollHeight") }, 3000);
80
+ var contents = jQuery(json.html)
81
+ contents.hide();
82
+ jQuery('#comments_wrapper').append(contents);
83
+ contents.fadeIn("slow");
84
+ apply_frame_comment_hover();
85
+ }
86
+ });
87
+ return false;
88
+ });
89
+ }
90
+ function apply_frame_comment_hover(){
91
+ jQuery('.comment_holder').hover(
92
+ function () { jQuery(this).addClass('comment-hover'); },
93
+ function () { jQuery(this).removeClass('comment-hover'); } );
94
+ }
95
+ function setup_share_submit(){
96
+ jQuery('#share_submit_share_new').click(function() {
97
+ jQuery(this).parent().append('<p class="share-loading"><img src="/images/spinner.gif" alt="loading..." /> ' + ADD_SHARE_MESSAGE + '</p>');
98
+ jQuery('#share_submit_share_new').hide();
99
+ var form = jQuery(this).parents('form');
100
+ jQuery.post(form.attr('action'), form.serialize() + '&format=json',
101
+ function(data){
102
+ var json = eval('(' + data + ')');
103
+ jQuery('.share-loading').remove();
104
+ jQuery('#share_submit_share_new').show();
105
+ if(!json.success){
106
+ jQuery.jGrowl.info(json.message);
107
+ } else {
108
+ jQuery.jGrowl.info(json.message);
109
+ }
110
+ });
111
+ return false;
112
+ });
113
+ }
114
+
115
+ jQuery(document).ready(function() {
116
+ jQuery("#content_iframe").load(maximize_iframe_height);
117
+ jQuery(window).bind('resize', function() {
118
+ maximize_iframe_height();
119
+ });
120
+ });
121
+
122
+ function maximize_iframe_height() {
123
+ var frame = jQuery("#content_iframe");
124
+ frame.height(jQuery(window).height() - jQuery('#toolbar').height());
125
+ jQuery('#recs_panel').css("left", jQuery("#content_iframe").width() - 252);
126
+ }
127
+
128
+ function initRecsPanel() {
129
+ var panel = jQuery("#recs_panel");
130
+ panel.append("<div id='rec_close_box' title='Close'>x</div>");
131
+ jQuery("#rec_close_box").click(function() {jQuery("#recs_panel").hide();jQuery("#show_recommendations_link").show();return false;});
132
+ panel.css("left", jQuery("#toolbar").width() - 250);
133
+ if (panel.draggable) panel.draggable();
134
+ }
@@ -1,104 +1,10 @@
1
- function apply_show_entry_content(){
2
- jQuery('.combined-feed-list .feed-item .feed-title').hover(
3
- function () {
4
- jQuery(this).next('.combined-feed-list .feed-item .feed-content').show();
5
- },
6
- function () {
7
- jQuery(this).next('.combined-feed-list .feed-item .feed-content').hide();
8
- }
9
- );
10
- jQuery('.combined-feed-list .feed-item .feed-content').hover(
11
- function () {
12
- jQuery(this).show();
13
- },
14
- function () {
15
- jQuery(this).hide();
16
- }
17
- );
18
- }
19
-
20
- function show_tool(tool) {
21
- jQuery('.tool').hide();
22
- jQuery('#content_iframe').width('75%');
23
- jQuery('#' + tool + '_tool').show();
24
- jQuery('#recs_panel').css("left", jQuery("#content_iframe").width() - 252);
25
- maximize_space();
26
- return false;
27
- }
28
- function maximize_space() {
29
- var container = jQuery(".tools_container");
30
- var spacer = jQuery('#comments_tools_close_wrapper').height() + 5;
31
- container.height(jQuery(window).height() - (jQuery('#toolbar').height() + spacer));
32
- }
33
- function setup_entry_comment_submit(){
34
- jQuery(".entry-comment-submit").click(function() {
35
- jQuery(this).siblings('textarea').hide();
36
- jQuery(".entry-comment-submit").hide();
37
- jQuery(this).parent().append('<p class="entry-comment-loading"><img src="/images/spinner.gif" alt="loading..." /> ' + ADD_COMMENT_MESSAGE + '</p>');
38
- var form = jQuery(this).parents('form');
39
- jQuery.post(form.attr('action'), form.serialize() + '&format=json',
40
- function(data){
41
- var json = eval('(' + data + ')');
42
- if(!json.success){
43
- jQuery.jGrowl.info(json.message);
44
- } else {
45
- jQuery('.entry-comment-loading').remove();
46
- jQuery('#comments_tool').find('textarea').show();
47
- jQuery('#comments_tool').find('textarea').val('');
48
- jQuery(".entry-comment-submit").show();
49
- jQuery("#comments_container").animate({ scrollTop: jQuery("#comments_tool").attr("scrollHeight") }, 3000);
50
- var contents = jQuery(json.html)
51
- contents.hide();
52
- jQuery('#comments_wrapper').append(contents);
53
- contents.fadeIn("slow");
54
- apply_frame_comment_hover();
55
- }
56
- });
57
- return false;
58
- });
59
- }
60
- function apply_frame_comment_hover(){
61
- jQuery('.comment_holder').hover(
62
- function () { jQuery(this).addClass('comment-hover'); },
63
- function () { jQuery(this).removeClass('comment-hover'); } );
64
- }
65
- function setup_share_submit(){
66
- jQuery('#share_submit_share_new').click(function() {
67
- jQuery(this).parent().append('<p class="share-loading"><img src="/images/spinner.gif" alt="loading..." /> ' + ADD_SHARE_MESSAGE + '</p>');
68
- jQuery('#share_submit_share_new').hide();
69
- var form = jQuery(this).parents('form');
70
- jQuery.post(form.attr('action'), form.serialize() + '&format=json',
71
- function(data){
72
- var json = eval('(' + data + ')');
73
- jQuery('.share-loading').remove();
74
- jQuery('#share_submit_share_new').show();
75
- if(!json.success){
76
- jQuery.jGrowl.info(json.message);
77
- } else {
78
- jQuery.jGrowl.info(json.message);
79
- }
80
- });
81
- return false;
82
- });
83
- }
84
-
85
- jQuery(document).ready(function() {
86
- jQuery("#content_iframe").load(maximize_iframe_height);
87
- jQuery(window).bind('resize', function() {
88
- maximize_iframe_height();
89
- });
90
- });
91
-
92
- function maximize_iframe_height() {
93
- var frame = jQuery("#content_iframe");
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
- if (panel.draggable) panel.draggable();
104
- }
1
+ function apply_add_feed(){jQuery(".add-identity").bind("submit",function(){jQuery("#submit_add_feed").hide();jQuery("#finding_uri_message").show();jQuery(this).ajaxSubmit({dataType:"script",beforeSend:add_headers});return false})}function apply_delete_feed(){jQuery(".identity-feed-delete").bind("submit",function(){jQuery(this).replaceWith(jQuery(jQuery("#muck_ajax_delete_control_message").html()).show());jQuery(this).ajaxSubmit({dataType:"script",beforeSend:add_headers});return false})}
2
+ function apply_delete_hover(){jQuery("ul#my-services-list li form").hide();jQuery("ul#my-services-list li").hover(function(){jQuery(this).children("form").show()},function(){jQuery(this).children("form").hide()})}
3
+ function apply_show_entry_content(){jQuery(".combined-feed-list .feed-item .feed-title").hover(function(){jQuery(this).next(".combined-feed-list .feed-item .feed-content").show()},function(){jQuery(this).next(".combined-feed-list .feed-item .feed-content").hide()});jQuery(".combined-feed-list .feed-item .feed-content").hover(function(){jQuery(this).show()},function(){jQuery(this).hide()})}
4
+ function show_tool(b){jQuery(".tool").hide();jQuery("#content_iframe").width("75%");jQuery("#"+b+"_tool").show();jQuery("#recs_panel").css("left",jQuery("#content_iframe").width()-252);maximize_space();return false}function maximize_space(){var b=jQuery(".tools_container"),a=jQuery("#comments_tools_close_wrapper").height()+5;b.height(jQuery(window).height()-(jQuery("#toolbar").height()+a))}
5
+ function setup_entry_comment_submit(){jQuery(".entry-comment-submit").click(function(){jQuery(this).siblings("textarea").hide();jQuery(".entry-comment-submit").hide();jQuery(this).parent().append('<p class="entry-comment-loading"><img src="/images/spinner.gif" alt="loading..." /> '+ADD_COMMENT_MESSAGE+"</p>");var b=jQuery(this).parents("form");jQuery.post(b.attr("action"),b.serialize()+"&format=json",function(a){a=eval("("+a+")");if(a.success){jQuery(".entry-comment-loading").remove();jQuery("#comments_tool").find("textarea").show();
6
+ jQuery("#comments_tool").find("textarea").val("");jQuery(".entry-comment-submit").show();jQuery("#comments_container").animate({scrollTop:jQuery("#comments_tool").attr("scrollHeight")},3E3);a=jQuery(a.html);a.hide();jQuery("#comments_wrapper").append(a);a.fadeIn("slow");apply_frame_comment_hover()}else jQuery.jGrowl.info(a.message)});return false})}
7
+ function apply_frame_comment_hover(){jQuery(".comment_holder").hover(function(){jQuery(this).addClass("comment-hover")},function(){jQuery(this).removeClass("comment-hover")})}
8
+ function setup_share_submit(){jQuery("#share_submit_share_new").click(function(){jQuery(this).parent().append('<p class="share-loading"><img src="/images/spinner.gif" alt="loading..." /> '+ADD_SHARE_MESSAGE+"</p>");jQuery("#share_submit_share_new").hide();var b=jQuery(this).parents("form");jQuery.post(b.attr("action"),b.serialize()+"&format=json",function(a){a=eval("("+a+")");jQuery(".share-loading").remove();jQuery("#share_submit_share_new").show();jQuery.jGrowl.info(a.message)});return false})}
9
+ jQuery(document).ready(function(){jQuery("#content_iframe").load(maximize_iframe_height);jQuery(window).bind("resize",function(){maximize_iframe_height()})});function maximize_iframe_height(){jQuery("#content_iframe").height(jQuery(window).height()-jQuery("#toolbar").height());jQuery("#recs_panel").css("left",jQuery("#content_iframe").width()-252)}
10
+ function initRecsPanel(){var b=jQuery("#recs_panel");b.append("<div id='rec_close_box' title='Close'>x</div>");jQuery("#rec_close_box").click(function(){jQuery("#recs_panel").hide();jQuery("#show_recommendations_link").show();return false});b.css("left",jQuery("#toolbar").width()-250);b.draggable&&b.draggable()};
@@ -13,6 +13,7 @@
13
13
  #identity-feed input[type="text"] {width:380px;}
14
14
  ul#my-services-list li {position:relative;}
15
15
  ul#my-services-list li form {right:-25px;position:absolute;top:3px;}
16
+ ul#my-services-list li .waiting{height:15px;display:inline-block;}
16
17
  ul.service-summary{margin:0;padding:0;list-style:none;}
17
18
  ul.service-summary a.service-link{display:inline-block;margin:2px 0;padding:2px 0 5px 28px;text-decoration:none;}
18
19
  #data-sources #sources-list ul {float:left;display:inline-block;height:170px;margin:0 20px;width:150px;}
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muck-services
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 3
8
- - 1
9
- - 1
10
- version: 3.1.1
8
+ - 2
9
+ - 0
10
+ version: 3.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joel Duffin
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-01-28 00:00:00 -07:00
19
+ date: 2011-02-01 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -312,12 +312,14 @@ files:
312
312
  - app/views/feeds/new_oai_rss.html.erb
313
313
  - app/views/feeds/show.html.erb
314
314
  - app/views/feeds/unban.html.erb
315
- - app/views/identity_feeds/_available_service_categories.html.erb
315
+ - app/views/identity_feeds/_available_service_categories.erb
316
316
  - app/views/identity_feeds/_form.erb
317
- - app/views/identity_feeds/_services_for_user.html.erb
318
- - app/views/identity_feeds/edit.html.erb
319
- - app/views/identity_feeds/index.html.erb
320
- - app/views/identity_feeds/new.html.erb
317
+ - app/views/identity_feeds/_services_for_user.erb
318
+ - app/views/identity_feeds/create.erb
319
+ - app/views/identity_feeds/destroy.erb
320
+ - app/views/identity_feeds/edit.erb
321
+ - app/views/identity_feeds/index.erb
322
+ - app/views/identity_feeds/new.erb
321
323
  - app/views/oai_endpoints/_form.html.erb
322
324
  - app/views/oai_endpoints/_oai_endpoint_row.html.erb
323
325
  - app/views/oai_endpoints/new.html.erb
@@ -331,18 +333,18 @@ files:
331
333
  - app/views/recommendations/index.rss.builder
332
334
  - app/views/recommendations/index.xml.builder
333
335
  - app/views/recommendations/real_time.html.erb
334
- - app/views/service_templates/_facebook.html.erb
335
- - app/views/service_templates/_friendfeed.html.erb
336
- - app/views/service_templates/_goodreads.html.erb
337
- - app/views/service_templates/_linkedin.html.erb
338
- - app/views/service_templates/_netflix.html.erb
339
- - app/views/service_templates/_polyvore.html.erb
340
- - app/views/service_templates/_zotero_group.html.erb
341
- - app/views/services/_edit_service.html.erb
342
- - app/views/services/_new_service.html.erb
343
- - app/views/services/_personal_recommendations.html.erb
344
- - app/views/services/_summary.html.erb
345
- - app/views/services/_view_service.html.erb
336
+ - app/views/service_templates/_facebook.erb
337
+ - app/views/service_templates/_friendfeed.erb
338
+ - app/views/service_templates/_goodreads.erb
339
+ - app/views/service_templates/_linkedin.erb
340
+ - app/views/service_templates/_netflix.erb
341
+ - app/views/service_templates/_polyvore.erb
342
+ - app/views/service_templates/_zotero_group.erb
343
+ - app/views/services/_edit_service.erb
344
+ - app/views/services/_new_service.erb
345
+ - app/views/services/_personal_recommendations.erb
346
+ - app/views/services/_summary.erb
347
+ - app/views/services/_view_service.erb
346
348
  - app/views/services_mailer/notification_feed_added.html.erb
347
349
  - app/views/services_mailer/notification_feed_added.text.erb
348
350
  - app/views/services_mailer/notification_oai_endpoint_added.html.erb
@@ -460,6 +462,7 @@ files:
460
462
  - lib/muck-services/services.rb
461
463
  - lib/tasks/muck_services.rake
462
464
  - muck-services.gemspec
465
+ - public/javascripts/muck_services-src.js
463
466
  - public/javascripts/muck_services.js
464
467
  - public/stylesheets/frame.css
465
468
  - public/stylesheets/muck-services.css
@@ -1,25 +0,0 @@
1
- <div id="my-services" class="services-main <%= css %>">
2
- <h2><%= title || I18n.t('muck.services.my_services') %></h2>
3
- <ul id="my-services-list" class="services-list">
4
- <% if edit -%>
5
- <%= render(:partial => 'services/edit_service', :collection => identity_feeds) %>
6
- <% else -%>
7
- <%= render(:partial => 'services/view_service', :collection => identity_feeds) %>
8
- <% end -%>
9
- </ul>
10
- </div>
11
- <% content_for :javascript do -%>
12
- jQuery(document).ready(function() {
13
- jQuery('ul#my-services-list li form').hide();
14
- jQuery('ul#my-services-list li').hover(
15
- function () { jQuery(this).children('form').show(); },
16
- function () { jQuery(this).children('form').hide(); }
17
- );
18
-
19
- jQuery('.muck_ajax_delete_control').click(function(){
20
- jQuery(this).parents('li').html(jQuery('#muck_ajax_delete_control_message').html());
21
- return true;
22
- });
23
- });
24
- <% end -%>
25
-
@@ -1,32 +0,0 @@
1
- <%= output_errors('', {:class => 'help-box'}) %>
2
- <%= available_service_categories(@service_categories, nil, 'span-15') %>
3
- <%= services_for_user(@user_services, nil, 'span-5') %>
4
-
5
- <% content_for :javascript do -%>
6
- jQuery(document).ready(function() {
7
- jQuery('a.lightbox').fancybox({
8
- 'hideOnContentClick': false,
9
- 'overlayShow': true,
10
- 'frameWidth': 400,
11
- 'frameHeight': 100
12
- });
13
- jQuery('a#facebook-link').fancybox({
14
- 'hideOnContentClick': false,
15
- 'overlayShow': true,
16
- 'frameWidth': 400,
17
- 'frameHeight': 275
18
- });
19
- jQuery('a#zotero-groups-link').fancybox({
20
- 'hideOnContentClick': false,
21
- 'overlayShow': true,
22
- 'frameWidth': 400,
23
- 'frameHeight': 130
24
- });
25
- jQuery('a#netflix-link').fancybox({
26
- 'hideOnContentClick': false,
27
- 'overlayShow': true,
28
- 'frameWidth': 400,
29
- 'frameHeight': 160
30
- });
31
- });
32
- <% end -%>