muck-services 3.1.1 → 3.2.0

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