rockdove 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.yardopts +1 -0
  2. data/CHANGELOG.md +8 -1
  3. data/README.md +5 -2
  4. data/lib/generators/rockdove/install_generator.rb +4 -1
  5. data/lib/rockdove/email_parser.rb +6 -8
  6. data/lib/rockdove/exchange_mail.rb +18 -2
  7. data/lib/rockdove/version.rb +1 -1
  8. data/lib/rockdove.rb +11 -0
  9. data/rockdove.gemspec +2 -2
  10. data/spec/rockdove/collect_mail_spec.rb +29 -0
  11. data/spec/rockdove/emails/attachment.yml +4 -0
  12. data/spec/rockdove/emails/mail_with_attachment.yml +51 -0
  13. data/spec/rockdove/rockdove_shared_spec.rb +8 -1
  14. data/spec/spec_helper.rb +7 -5
  15. metadata +26 -52
  16. data/.yardoc/checksums +0 -9
  17. data/.yardoc/object_types +0 -0
  18. data/.yardoc/objects/root.dat +0 -0
  19. data/.yardoc/proxy_types +0 -0
  20. data/doc/Rockdove/CollectMail.html +0 -1302
  21. data/doc/Rockdove/Config.html +0 -1125
  22. data/doc/Rockdove/Dovetie.html +0 -123
  23. data/doc/Rockdove/EmailParser.html +0 -377
  24. data/doc/Rockdove/ExchangeMail.html +0 -1054
  25. data/doc/Rockdove/Generators/InstallGenerator.html +0 -192
  26. data/doc/Rockdove/Generators.html +0 -115
  27. data/doc/Rockdove/RockdoveCollection.html +0 -123
  28. data/doc/Rockdove.html +0 -215
  29. data/doc/RockdoveServer.html +0 -404
  30. data/doc/_index.html +0 -214
  31. data/doc/class_list.html +0 -53
  32. data/doc/css/common.css +0 -1
  33. data/doc/css/full_list.css +0 -57
  34. data/doc/css/style.css +0 -328
  35. data/doc/file.CHANGELOG.html +0 -93
  36. data/doc/file.README.html +0 -164
  37. data/doc/file_list.html +0 -58
  38. data/doc/frames.html +0 -28
  39. data/doc/index.html +0 -164
  40. data/doc/js/app.js +0 -214
  41. data/doc/js/full_list.js +0 -173
  42. data/doc/js/jquery.js +0 -4
  43. data/doc/method_list.html +0 -492
  44. data/doc/top-level-namespace.html +0 -126
data/doc/file_list.html DELETED
@@ -1,58 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html>
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
-
7
- <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
8
-
9
- <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
10
-
11
-
12
-
13
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
14
-
15
- <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
16
-
17
-
18
- <base id="base_target" target="_parent" />
19
- </head>
20
- <body>
21
- <script type="text/javascript" charset="utf-8">
22
- if (window.top.frames.main) {
23
- document.getElementById('base_target').target = 'main';
24
- document.body.className = 'frames';
25
- }
26
- </script>
27
- <div id="content">
28
- <h1 id="full_list_header">File List</h1>
29
- <div id="nav">
30
-
31
- <span><a target="_self" href="class_list.html">
32
- Classes
33
- </a></span>
34
-
35
- <span><a target="_self" href="method_list.html">
36
- Methods
37
- </a></span>
38
-
39
- <span><a target="_self" href="file_list.html">
40
- Files
41
- </a></span>
42
-
43
- </div>
44
- <div id="search">Search: <input type="text" /></div>
45
-
46
- <ul id="full_list" class="file">
47
-
48
-
49
- <li class="r1"><a href="index.html" title="README">README</a></li>
50
-
51
-
52
- <li class="r2"><a href="file.CHANGELOG.html" title="CHANGELOG">CHANGELOG</a></li>
53
-
54
-
55
- </ul>
56
- </div>
57
- </body>
58
- </html>
data/doc/frames.html DELETED
@@ -1,28 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
3
-
4
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
- <head>
6
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7
- <title>Documentation by YARD 0.8.2.1</title>
8
- </head>
9
- <script type="text/javascript" charset="utf-8">
10
- window.onload = function() {
11
- var match = window.location.hash.match(/^#!(.+)/);
12
- var name = 'index.html';
13
- if (match) {
14
- name = unescape(match[1]);
15
- }
16
- document.writeln('<frameset cols="20%,*">' +
17
- '<frame name="list" src="class_list.html" />' +
18
- '<frame name="main" src="' + name + '" />' +
19
- '</frameset>');
20
- }
21
- </script>
22
- <noscript>
23
- <frameset cols="20%,*">
24
- <frame name="list" src="class_list.html" />
25
- <frame name="main" src="index.html" />
26
- </frameset>
27
- </noscript>
28
- </html>
data/doc/index.html DELETED
@@ -1,164 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
- <title>
7
- File: README
8
-
9
- &mdash; Documentation by YARD 0.8.2.1
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
-
15
- <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
-
17
- <script type="text/javascript" charset="utf-8">
18
- hasFrames = window.top.frames.main ? true : false;
19
- relpath = '';
20
- framesUrl = "frames.html#!" + escape(window.location.href);
21
- </script>
22
-
23
-
24
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
25
-
26
- <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
27
-
28
-
29
- </head>
30
- <body>
31
- <div id="header">
32
- <div id="menu">
33
-
34
- <a href="_index.html">Index</a> &raquo;
35
- <span class="title">File: README</span>
36
-
37
-
38
- <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
39
- </div>
40
-
41
- <div id="search">
42
-
43
- <a class="full_list_link" id="class_list_link"
44
- href="class_list.html">
45
- Class List
46
- </a>
47
-
48
- <a class="full_list_link" id="method_list_link"
49
- href="method_list.html">
50
- Method List
51
- </a>
52
-
53
- <a class="full_list_link" id="file_list_link"
54
- href="file_list.html">
55
- File List
56
- </a>
57
-
58
- </div>
59
- <div class="clear"></div>
60
- </div>
61
-
62
- <iframe id="search_frame"></iframe>
63
-
64
- <div id="content"><div id='filecontents'><h1>rockdove <img src="http://kiran.gnufied.org/wp-content/uploads/2012/07/1341725724_bird.png" alt="rockdove"> <a href="http://travis-ci.org/kiranh/rockdove"><img src="https://secure.travis-ci.org/kiranh/rockdove.png?branch=master" alt="Build Status"></a></h1>
65
-
66
- <p>Incoming mail processing daemon for Exchange Web Services 1.0 (EWS). This Ruby Gem connects to the EWS mailbox, fetches the mail items, parses each mail item (Signatures, Replies, Forward), handles bounce types (Undeliverable,AutoReply) and polls the mailbox for every interval specified. </p>
67
-
68
- <p>It provides a template of the rockdove server which is a simple plug and play daemon.</p>
69
-
70
- <h2>Installation</h2>
71
-
72
- <p>```ruby
73
- #Under Gemfile
74
- gem &#39;rockdove&#39;, :require =&gt; false</p>
75
-
76
- <p>#After bundle install, run this command below
77
- bundle exec rails g rockdove:install
78
- ```
79
- It copies a template of rockdove server under you script folder which contains the following snippet:</p>
80
-
81
- <p>```ruby</p>
82
-
83
- <p># ...</p>
84
-
85
- <p>Rockdove::Config.configure do |config|
86
- config.ews<em>url &#39;https:&#47;&#47;ewsdomain.com&#47;ews&#47;exchange.asmx&#39;
87
- config.ews</em>username &#39;ews<em>username&#39;
88
- config.ews</em>password &#39;ews<em>password&#39;
89
- config.ews</em>folder &#39;Inbox&#39; # ews<em>folder is Inbox by default
90
- config.ews</em>archive<em>folder &#39;Archive&#39; # by default, it deletes the mail after processing,
91
- # mention ews</em>archive<em>folder if it has to be archived to a different folder
92
- config.ews</em>watch_interval 60 # by default, the polling interval is 60
93
- end</p>
94
-
95
- <p># ...</p>
96
-
97
- <p>Rockdove::CollectMail.watch do |rockdove<em>parsed</em>mail|
98
- begin
99
- #Model.method(rockdove<em>parsed</em>mail)
100
- rescue Exception =&gt; e
101
- Rockdove.logger.error &quot;Exception occurred while receiving message:#rockdove&lt;em&gt;parsed&lt;/em&gt;mail&quot;
102
- Rockdove.logger.error [e, *e.backtrace].join(&quot;\n&quot;)
103
- end
104
- end</p>
105
-
106
- <p>```
107
- You need to change the Model into the one being used in your project that would require this behavior of Mail Processing for Exchange Web Services 1.0 and further process the mail as per the requirements in your project.</p>
108
-
109
- <ul>
110
- <li>And then you can run the script in console mode, <code>^C</code> will stop it, calling the stop method</li>
111
- </ul>
112
-
113
- <p><code>sh
114
- $ ruby .&#47;script&#47;rockdove_server.rb start #from your project root
115
- </code>
116
- - or run it daemonized, by default <code>.&#47;rockdove_server.log</code> and <code>.&#47;rockdove_server.pid</code> will be created</p>
117
-
118
- <p><code>sh
119
- $ ruby .&#47;script&#47;rockdove_server.rb -d start
120
- </code></p>
121
-
122
- <ul>
123
- <li>you can stop the daemon, removing <code>.&#47;rockdove_server.pid</code> or</li>
124
- </ul>
125
-
126
- <p><code>sh
127
- $ ruby .&#47;script&#47;rockdove_server.rb stop
128
- </code></p>
129
-
130
- <hr>
131
-
132
- <h2>Compatibility</h2>
133
-
134
- <p>Tested on all Ruby versions (1.8.7, 1.9.2, 1.9.3) with Travis CI. </p>
135
-
136
- <h2>Contributors</h2>
137
-
138
- <p>Welcome for any code optmizations or issue fixes or enhancements</p>
139
-
140
- <h3>Setup:</h3>
141
-
142
- <p><code>ruby
143
- git clone git@github.com:kiranh&#47;rockdove.git
144
- cd rockdove
145
- bundle exec rake # to run tests or bundle exec guard
146
- </code></p>
147
-
148
- <h2>Acknowledgements</h2>
149
-
150
- <p>To <a href="https://github.com/bijushoolapani">Biju Shoolapani</a> for support and encouragement. And the Code Reviewer, <a href="http://github.com/gnufied">Hemant Kumar</a>.</p>
151
-
152
- <h2>Copyright</h2>
153
-
154
- <p>Copyright (c) 2012-2015 Kiran Soumya Bosetti. See LICENSE for details.</p>
155
- </div></div>
156
-
157
- <div id="footer">
158
- Generated on Wed Jul 11 11:40:24 2012 by
159
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
160
- 0.8.2.1 (ruby-1.9.2).
161
- </div>
162
-
163
- </body>
164
- </html>
data/doc/js/app.js DELETED
@@ -1,214 +0,0 @@
1
- function createSourceLinks() {
2
- $('.method_details_list .source_code').
3
- before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
4
- $('.toggleSource').toggle(function() {
5
- $(this).parent().nextAll('.source_code').slideDown(100);
6
- $(this).text("Hide source");
7
- },
8
- function() {
9
- $(this).parent().nextAll('.source_code').slideUp(100);
10
- $(this).text("View source");
11
- });
12
- }
13
-
14
- function createDefineLinks() {
15
- var tHeight = 0;
16
- $('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
17
- $('.toggleDefines').toggle(function() {
18
- tHeight = $(this).parent().prev().height();
19
- $(this).prev().show();
20
- $(this).parent().prev().height($(this).parent().height());
21
- $(this).text("(less)");
22
- },
23
- function() {
24
- $(this).prev().hide();
25
- $(this).parent().prev().height(tHeight);
26
- $(this).text("more...");
27
- });
28
- }
29
-
30
- function createFullTreeLinks() {
31
- var tHeight = 0;
32
- $('.inheritanceTree').toggle(function() {
33
- tHeight = $(this).parent().prev().height();
34
- $(this).parent().toggleClass('showAll');
35
- $(this).text("(hide)");
36
- $(this).parent().prev().height($(this).parent().height());
37
- },
38
- function() {
39
- $(this).parent().toggleClass('showAll');
40
- $(this).parent().prev().height(tHeight);
41
- $(this).text("show all");
42
- });
43
- }
44
-
45
- function fixBoxInfoHeights() {
46
- $('dl.box dd.r1, dl.box dd.r2').each(function() {
47
- $(this).prev().height($(this).height());
48
- });
49
- }
50
-
51
- function searchFrameLinks() {
52
- $('.full_list_link').click(function() {
53
- toggleSearchFrame(this, $(this).attr('href'));
54
- return false;
55
- });
56
- }
57
-
58
- function toggleSearchFrame(id, link) {
59
- var frame = $('#search_frame');
60
- $('#search a').removeClass('active').addClass('inactive');
61
- if (frame.attr('src') == link && frame.css('display') != "none") {
62
- frame.slideUp(100);
63
- $('#search a').removeClass('active inactive');
64
- }
65
- else {
66
- $(id).addClass('active').removeClass('inactive');
67
- frame.attr('src', link).slideDown(100);
68
- }
69
- }
70
-
71
- function linkSummaries() {
72
- $('.summary_signature').click(function() {
73
- document.location = $(this).find('a').attr('href');
74
- });
75
- }
76
-
77
- function framesInit() {
78
- if (hasFrames) {
79
- document.body.className = 'frames';
80
- $('#menu .noframes a').attr('href', document.location);
81
- window.top.document.title = $('html head title').text();
82
- }
83
- else {
84
- $('#menu .noframes a').text('frames').attr('href', framesUrl);
85
- }
86
- }
87
-
88
- function keyboardShortcuts() {
89
- if (window.top.frames.main) return;
90
- $(document).keypress(function(evt) {
91
- if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
92
- if (typeof evt.target !== "undefined" &&
93
- (evt.target.nodeName == "INPUT" ||
94
- evt.target.nodeName == "TEXTAREA")) return;
95
- switch (evt.charCode) {
96
- case 67: case 99: $('#class_list_link').click(); break; // 'c'
97
- case 77: case 109: $('#method_list_link').click(); break; // 'm'
98
- case 70: case 102: $('#file_list_link').click(); break; // 'f'
99
- default: break;
100
- }
101
- });
102
- }
103
-
104
- function summaryToggle() {
105
- $('.summary_toggle').click(function() {
106
- if (localStorage) {
107
- localStorage.summaryCollapsed = $(this).text();
108
- }
109
- $('.summary_toggle').each(function() {
110
- $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
111
- var next = $(this).parent().parent().nextAll('ul.summary').first();
112
- if (next.hasClass('compact')) {
113
- next.toggle();
114
- next.nextAll('ul.summary').first().toggle();
115
- }
116
- else if (next.hasClass('summary')) {
117
- var list = $('<ul class="summary compact" />');
118
- list.html(next.html());
119
- list.find('.summary_desc, .note').remove();
120
- list.find('a').each(function() {
121
- $(this).html($(this).find('strong').html());
122
- $(this).parent().html($(this)[0].outerHTML);
123
- });
124
- next.before(list);
125
- next.toggle();
126
- }
127
- });
128
- return false;
129
- });
130
- if (localStorage) {
131
- if (localStorage.summaryCollapsed == "collapse") {
132
- $('.summary_toggle').first().click();
133
- }
134
- else localStorage.summaryCollapsed = "expand";
135
- }
136
- }
137
-
138
- function fixOutsideWorldLinks() {
139
- $('a').each(function() {
140
- if (window.location.host != this.host) this.target = '_parent';
141
- });
142
- }
143
-
144
- function generateTOC() {
145
- if ($('#filecontents').length === 0) return;
146
- var _toc = $('<ol class="top"></ol>');
147
- var show = false;
148
- var toc = _toc;
149
- var counter = 0;
150
- var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
151
- var i;
152
- if ($('#filecontents h1').length > 1) tags.unshift('h1');
153
- for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
154
- var lastTag = parseInt(tags[0][1], 10);
155
- $(tags.join(', ')).each(function() {
156
- if ($(this).parents('.method_details .docstring').length != 0) return;
157
- if (this.id == "filecontents") return;
158
- show = true;
159
- var thisTag = parseInt(this.tagName[1], 10);
160
- if (this.id.length === 0) {
161
- var proposedId = $(this).attr('toc-id');
162
- if (typeof(proposedId) != "undefined") this.id = proposedId;
163
- else {
164
- var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
165
- if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
166
- this.id = proposedId;
167
- }
168
- }
169
- if (thisTag > lastTag) {
170
- for (i = 0; i < thisTag - lastTag; i++) {
171
- var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
172
- }
173
- }
174
- if (thisTag < lastTag) {
175
- for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
176
- }
177
- var title = $(this).attr('toc-title');
178
- if (typeof(title) == "undefined") title = $(this).text();
179
- toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
180
- lastTag = thisTag;
181
- });
182
- if (!show) return;
183
- html = '<div id="toc"><p class="title"><a class="hide_toc" href="#"><strong>Table of Contents</strong></a> <small>(<a href="#" class="float_toc">left</a>)</small></p></div>';
184
- $('#content').prepend(html);
185
- $('#toc').append(_toc);
186
- $('#toc .hide_toc').toggle(function() {
187
- $('#toc .top').slideUp('fast');
188
- $('#toc').toggleClass('hidden');
189
- $('#toc .title small').toggle();
190
- }, function() {
191
- $('#toc .top').slideDown('fast');
192
- $('#toc').toggleClass('hidden');
193
- $('#toc .title small').toggle();
194
- });
195
- $('#toc .float_toc').toggle(function() {
196
- $(this).text('float');
197
- $('#toc').toggleClass('nofloat');
198
- }, function() {
199
- $(this).text('left');
200
- $('#toc').toggleClass('nofloat');
201
- });
202
- }
203
-
204
- $(framesInit);
205
- $(createSourceLinks);
206
- $(createDefineLinks);
207
- $(createFullTreeLinks);
208
- $(fixBoxInfoHeights);
209
- $(searchFrameLinks);
210
- $(linkSummaries);
211
- $(keyboardShortcuts);
212
- $(summaryToggle);
213
- $(fixOutsideWorldLinks);
214
- $(generateTOC);
data/doc/js/full_list.js DELETED
@@ -1,173 +0,0 @@
1
- var inSearch = null;
2
- var searchIndex = 0;
3
- var searchCache = [];
4
- var searchString = '';
5
- var regexSearchString = '';
6
- var caseSensitiveMatch = false;
7
- var ignoreKeyCodeMin = 8;
8
- var ignoreKeyCodeMax = 46;
9
- var commandKey = 91;
10
-
11
- RegExp.escape = function(text) {
12
- return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
13
- }
14
-
15
- function fullListSearch() {
16
- // generate cache
17
- searchCache = [];
18
- $('#full_list li').each(function() {
19
- var link = $(this).find('.object_link a');
20
- var fullName = link.attr('title').split(' ')[0];
21
- searchCache.push({name:link.text(), fullName:fullName, node:$(this), link:link});
22
- });
23
-
24
- $('#search input').keyup(function(event) {
25
- if ((event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax)
26
- || event.keyCode == commandKey)
27
- return;
28
- searchString = this.value;
29
- caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
30
- regexSearchString = RegExp.escape(searchString);
31
- if (caseSensitiveMatch) {
32
- regexSearchString += "|" +
33
- $.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
34
- join('.+?');
35
- }
36
- if (searchString === "") {
37
- clearTimeout(inSearch);
38
- inSearch = null;
39
- $('ul .search_uncollapsed').removeClass('search_uncollapsed');
40
- $('#full_list, #content').removeClass('insearch');
41
- $('#full_list li').removeClass('found').each(function() {
42
-
43
- var link = $(this).find('.object_link a');
44
- link.text(link.text());
45
- });
46
- if (clicked) {
47
- clicked.parents('ul').each(function() {
48
- $(this).removeClass('collapsed').prev().removeClass('collapsed');
49
- });
50
- }
51
- highlight();
52
- }
53
- else {
54
- if (inSearch) clearTimeout(inSearch);
55
- searchIndex = 0;
56
- lastRowClass = '';
57
- $('#full_list, #content').addClass('insearch');
58
- $('#noresults').text('');
59
- searchItem();
60
- }
61
- });
62
-
63
- $('#search input').focus();
64
- $('#full_list').after("<div id='noresults'></div>");
65
- }
66
-
67
- var lastRowClass = '';
68
- function searchItem() {
69
- for (var i = 0; i < searchCache.length / 50; i++) {
70
- var item = searchCache[searchIndex];
71
- var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
72
- var matchString = regexSearchString;
73
- var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
74
- if (searchName.match(matchRegexp) == null) {
75
- item.node.removeClass('found');
76
- }
77
- else {
78
- item.node.css('padding-left', '10px').addClass('found');
79
- item.node.parents().addClass('search_uncollapsed');
80
- item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
81
- lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
82
- item.link.html(item.name.replace(matchRegexp, "<strong>$&</strong>"));
83
- }
84
-
85
- if (searchCache.length === searchIndex + 1) {
86
- searchDone();
87
- return;
88
- }
89
- else {
90
- searchIndex++;
91
- }
92
- }
93
- inSearch = setTimeout('searchItem()', 0);
94
- }
95
-
96
- function searchDone() {
97
- highlight(true);
98
- if ($('#full_list li:visible').size() === 0) {
99
- $('#noresults').text('No results were found.').hide().fadeIn();
100
- }
101
- else {
102
- $('#noresults').text('');
103
- }
104
- $('#content').removeClass('insearch');
105
- clearTimeout(inSearch);
106
- inSearch = null;
107
- }
108
-
109
- clicked = null;
110
- function linkList() {
111
- $('#full_list li, #full_list li a:last').click(function(evt) {
112
- if ($(this).hasClass('toggle')) return true;
113
- if (this.tagName.toLowerCase() == "li") {
114
- var toggle = $(this).children('a.toggle');
115
- if (toggle.size() > 0 && evt.pageX < toggle.offset().left) {
116
- toggle.click();
117
- return false;
118
- }
119
- }
120
- if (clicked) clicked.removeClass('clicked');
121
- var win = window.top.frames.main ? window.top.frames.main : window.parent;
122
- if (this.tagName.toLowerCase() == "a") {
123
- clicked = $(this).parent('li').addClass('clicked');
124
- win.location = this.href;
125
- }
126
- else {
127
- clicked = $(this).addClass('clicked');
128
- win.location = $(this).find('a:last').attr('href');
129
- }
130
- return false;
131
- });
132
- }
133
-
134
- function collapse() {
135
- if (!$('#full_list').hasClass('class')) return;
136
- $('#full_list.class a.toggle').click(function() {
137
- $(this).parent().toggleClass('collapsed').next().toggleClass('collapsed');
138
- highlight();
139
- return false;
140
- });
141
- $('#full_list.class ul').each(function() {
142
- $(this).addClass('collapsed').prev().addClass('collapsed');
143
- });
144
- $('#full_list.class').children().removeClass('collapsed');
145
- highlight();
146
- }
147
-
148
- function highlight(no_padding) {
149
- var n = 1;
150
- $('#full_list li:visible').each(function() {
151
- var next = n == 1 ? 2 : 1;
152
- $(this).removeClass("r" + next).addClass("r" + n);
153
- if (!no_padding && $('#full_list').hasClass('class')) {
154
- $(this).css('padding-left', (10 + $(this).parents('ul').size() * 15) + 'px');
155
- }
156
- n = next;
157
- });
158
- }
159
-
160
- function escapeShortcut() {
161
- $(document).keydown(function(evt) {
162
- if (evt.which == 27) {
163
- $('#search_frame', window.top.document).slideUp(100);
164
- $('#search a', window.top.document).removeClass('active inactive');
165
- $(window.top).focus();
166
- }
167
- });
168
- }
169
-
170
- $(escapeShortcut);
171
- $(fullListSearch);
172
- $(linkList);
173
- $(collapse);