Class: Disqussion::Widget

Inherits:
Object
  • Object
show all
Defined in:
lib/disqussion/widget.rb

Overview

Disqus Widget generator.

All of the methods accept various options, and "account" is required for all of them. You can avoid having to pass in the account each time by setting it in the defaults like this:

Disqus::defaults[:account] = "my_account"

Constant Summary collapse

VALID_COLORS =
['blue', 'grey', 'green', 'red', 'orange']
VALID_NUM_ITEMS =
5..20
VALID_DEFAULT_TABS =
['people', 'recent', 'popular']
VALID_AVATAR_SIZES =
[24, 32, 48, 92, 128]
VALID_ORIENTATIONS =
['horizontal', 'vertical']
ROOT_PATH =
'http://disqus.com/forums/%s/'
THREAD =
ROOT_PATH + 'embed.js'
COMBO =
ROOT_PATH + 'combination_widget.js?num_items=%d&color=%s&default_tab=%s'
RECENT =
ROOT_PATH + 'recent_comments_widget.js?num_items=%d&avatar_size=%d'
ROOT_PATH + 'popular_threads_widget.js?num_items=%d'
TOP =
ROOT_PATH + 'top_commenters_widget.js?num_items=%d&avatar_size=%d&orientation=%s'

Class Method Summary collapse

Class Method Details

.combo(opts = {}) ⇒ Object

Show the Disqus combo widget. This is a three-tabbed box with links popular threads, top posters, and recent threads. Options:

  • :account: Your Discus account (required).
  • :num_items: How many items to show.
  • :hide_mods: Don't show moderators.
  • :default_tab: Should be 'people', 'recent', or 'popular'.


161
162
163
164
165
166
167
168
169
# File 'lib/disqussion/widget.rb', line 161

def combo(opts = {})
  opts = Disqus::defaults.merge(opts)
  validate_opts!(opts)
  s = '<script type="text/javascript" src="'
  s << COMBO
  s << '&hide_mods=1' if opts[:hide_mods]
  s << '"></script>' 
  s % [opts[:account], opts[:num_items], opts[:color], opts[:default_tab]]
end

.comment_counts(opts = {}) ⇒ Object

Loads Javascript to show the number of comments for the page.

The Javascript sets the inner html to the comment count for any links on the page that have the anchor "disqus_thread". For example, "View Comments" below would be replaced by "1 comment" or "23 comments" etc.

View Comments View Comments Options:

  • account: Your Discus account (required).


60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/disqussion/widget.rb', line 60

def comment_counts(opts = {})
  opts = Disqus::defaults.merge(opts)        
  validate_opts!(opts)
  s = <<-WHIMPER
  <script type="text/javascript">
  //<![CDATA[
  (function() {
      var links = document.getElementsByTagName('a');
      var query = '?';
      for(var i = 0; i < links.length; i++) {
        if(links[i].href.indexOf('#disqus_thread') >= 0) {
          query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
        }
      }
      document.write('<' + 'script type="text/javascript" src="#{ROOT_PATH}get_num_replies.js' + query + '"></' + 'script>');
    })();
  //]]>
  </script>
  WHIMPER
  s % opts[:account]
end

Show the popular threads Disqus widget. Options:

  • account: Your Discus account (required).
  • header: HTML snipper with header (default h2) tag and text.
  • num_items:: How many items to show.
  • hide_mods: Don't show moderators.


115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/disqussion/widget.rb', line 115

def popular_threads(opts = {})
  opts = Disqus::defaults.merge(opts)
  opts[:header] ||= '<h2 class="dsq-widget-title">Popular Threads</h2>'
  validate_opts!(opts)
  s = '<div id="dsq-popthreads" class="dsq-widget">'
  s << opts[:header]
  s << '<script type="text/javascript" src="'
  s << POPULAR
  s << '&hide_mods=1' if opts[:hide_mods]
  s << '"></script>'
  s << '</div>'
  s << '<a href="http://disqus.com">Powered by Disqus</a>' if opts[:show_powered_by]
  s % [opts[:account], opts[:num_items]]
end

.recent_comments(opts = {}) ⇒ Object

Show the recent comments Disqus widget. Options:

  • account: Your Discus account (required).
  • header: HTML snipper with header (default h2) tag and text.
  • num_items:: How many items to show.
  • hide_avatars: Don't show avatars.
  • avatar_size: Avatar size.


137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/disqussion/widget.rb', line 137

def recent_comments(opts = {})
  opts = Disqus::defaults.merge(opts)
  opts[:header] ||= '<h2 class="dsq-widget-title">Recent Comments</h2>'
  validate_opts!(opts)
  s = '<div id="dsq-recentcomments" class="dsq-widget">'
  s << opts[:header]
  s << '<script type="text/javascript" src="'
  s << RECENT 
  s << '&hide_avatars=1' if opts[:hide_avatars]
  s << '"></script>'
  s << '</div>'
  if opts[:show_powered_by]
    s << '<a href="http://disqus.com">Powered by Disqus</a>'
  end
  s % [opts[:account], opts[:num_items], opts[:avatar_size]]
end

.thread(opts = {}) ⇒ Object

Show the main Disqus thread widget. Options:

  • account: Your Discus account (required).


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/disqussion/widget.rb', line 30

def thread(opts = {})
  opts = Disqus::defaults.merge(opts)
  opts[:view_thread_text] ||= "View the discussion thread"
  validate_opts!(opts)
  s = ''
  if opts[:developer]
    s << '<script type="text/javascript">var disqus_developer = 1;</script>'
  end
  s << '<div id="disqus_thread"></div>'
  s << '<script type="text/javascript" src="' + THREAD + '"></script>'
  s << '<noscript><a href="http://%s.disqus.com/?url=ref">'
  s << opts[:view_thread_text]
  s << '</a></noscript>'
  if opts[:show_powered_by]
    s << '<a href="http://disqus.com" class="dsq-brlink">blog comments '
    s << 'powered by <span class="logo-disqus">Disqus</span></a>'
  end
  s % [opts[:account], opts[:account]]
end

.top_commenters(opts = {}) ⇒ Object

Show the top commenters Disqus thread widget. Options:

  • account: Your Discus account (required).
  • header: HTML snipper with header (default h2) tag and text.
  • show_powered_by: Show or hide the powered by Disqus text.
  • num_items:: How many items to show.
  • hide_mods: Don't show moderators.
  • hide_avatars: Don't show avatars.
  • avatar_size: Avatar size.


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/disqussion/widget.rb', line 91

def top_commenters(opts = {})
  opts = Disqus::defaults.merge(opts)
  opts[:header] ||= '<h2 class="dsq-widget-title">Top Commenters</h2>'
  validate_opts!(opts)        
  s = '<div id="dsq-topcommenters" class="dsq-widget">'
  s << opts[:header]
  s << '<script type="text/javascript" src="'
  s << TOP
  s << '&hide_avatars=1' if opts[:hide_avatars]
  s << '&hide_mods=1' if opts[:hide_mods]
  s << '"></script>'
  s << '</div>'
  if opts[:show_powered_by]
    s << '<a href="http://disqus.com">Powered by Disqus</a>'
  end
  s % [opts[:account], opts[:num_items], opts[:avatar_size], opts[:orientation]]
end