songkickr 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/.bundle/config +2 -0
  3. data/.gitignore +1 -0
  4. data/.travis.yml +8 -0
  5. data/Gemfile.lock +42 -22
  6. data/LICENSE +1 -1
  7. data/README.rdoc +14 -9
  8. data/Rakefile +3 -4
  9. data/lib/songkickr/artist.rb +2 -2
  10. data/lib/songkickr/artist_result.rb +4 -24
  11. data/lib/songkickr/calendar_entry.rb +23 -0
  12. data/lib/songkickr/calendar_result.rb +10 -0
  13. data/lib/songkickr/concert_setlist_result.rb +5 -27
  14. data/lib/songkickr/event.rb +8 -14
  15. data/lib/songkickr/event_result.rb +5 -23
  16. data/lib/songkickr/location.rb +4 -4
  17. data/lib/songkickr/location_result.rb +5 -30
  18. data/lib/songkickr/metro_area.rb +28 -0
  19. data/lib/songkickr/metro_area_result.rb +12 -0
  20. data/lib/songkickr/performance.rb +17 -12
  21. data/lib/songkickr/remote.rb +18 -198
  22. data/lib/songkickr/remote_api/artist_details.rb +17 -0
  23. data/lib/songkickr/remote_api/event_details.rb +17 -0
  24. data/lib/songkickr/remote_api/past_events.rb +48 -0
  25. data/lib/songkickr/remote_api/similar_artists.rb +14 -0
  26. data/lib/songkickr/remote_api/upcoming_events.rb +125 -0
  27. data/lib/songkickr/remote_api/user_events_and_trackings.rb +143 -0
  28. data/lib/songkickr/remote_api/venue_details.rb +16 -0
  29. data/lib/songkickr/result_set.rb +27 -0
  30. data/lib/songkickr/setlist.rb +7 -12
  31. data/lib/songkickr/setlist_item.rb +1 -1
  32. data/lib/songkickr/tracking.rb +18 -0
  33. data/lib/songkickr/tracking_result.rb +24 -0
  34. data/lib/songkickr/venue.rb +10 -2
  35. data/lib/songkickr/venue_result.rb +32 -0
  36. data/lib/songkickr/version.rb +1 -1
  37. data/lib/songkickr.rb +24 -17
  38. data/songkickr.gemspec +17 -44
  39. data/test/fixtures/event_7391451.json +732 -1
  40. data/test/fixtures/location_search.json +38 -0
  41. data/test/fixtures/metro_area.json +11 -0
  42. data/test/fixtures/users_attendance_calendar.json +243 -0
  43. data/test/fixtures/vcr/artist_events.yml +1394 -0
  44. data/test/fixtures/vcr/artist_search.yml +38 -0
  45. data/test/fixtures/vcr/artists_gigography.yml +187 -0
  46. data/test/fixtures/vcr/concert_setlists.yml +47 -0
  47. data/test/fixtures/vcr/event_search.yml +110 -0
  48. data/test/fixtures/vcr/invalid_api_key.yml +6 -36
  49. data/test/fixtures/vcr/invalid_artist_id.yml +6 -6
  50. data/test/fixtures/vcr/invalid_event_id.yml +6 -6
  51. data/test/fixtures/vcr/invalid_user.yml +6 -6
  52. data/test/fixtures/vcr/invalid_venue_id.yml +6 -6
  53. data/test/fixtures/vcr/location_search.yml +42 -0
  54. data/test/fixtures/vcr/metro_areas_events.yml +1535 -0
  55. data/test/fixtures/vcr/similar_artists.yml +64 -0
  56. data/test/fixtures/vcr/users_artist_tracking.yml +99 -0
  57. data/test/fixtures/vcr/users_attendance.yml +66 -0
  58. data/test/fixtures/vcr/users_attendance_calendar.yml +51 -0
  59. data/test/fixtures/vcr/users_events.yml +809 -0
  60. data/test/fixtures/vcr/users_gigography.yml +2782 -0
  61. data/test/fixtures/vcr/users_metro_area_tracking.yml +66 -0
  62. data/test/fixtures/vcr/users_muted_artists.yml +66 -0
  63. data/test/fixtures/vcr/users_tracked_artists.yml +75 -0
  64. data/test/fixtures/vcr/users_tracked_events_calendar.yml +1901 -0
  65. data/test/fixtures/vcr/users_tracked_metro_areas.yml +37 -0
  66. data/test/fixtures/vcr/valid_artist.yml +9 -9
  67. data/test/fixtures/vcr/valid_event.yml +103 -38
  68. data/test/fixtures/vcr/valid_user.yml +634 -44
  69. data/test/fixtures/vcr/valid_venue.yml +25 -26
  70. data/test/fixtures/vcr/venue_calendar.yml +500 -0
  71. data/test/fixtures/vcr/venue_search.yml +42 -0
  72. data/test/helper.rb +1 -27
  73. data/test/songkickr/test_calendar_entry.rb +15 -0
  74. data/test/songkickr/test_event.rb +8 -9
  75. data/test/songkickr/test_location.rb +11 -11
  76. data/test/songkickr/test_metro_area.rb +17 -0
  77. data/test/songkickr/test_remote.rb +149 -3
  78. data/test/songkickr/test_setlist_item.rb +20 -0
  79. data/test/songkickr/test_venue.rb +1 -2
  80. data/test.rb +3 -5
  81. metadata +120 -152
  82. data/bin/autospec +0 -16
  83. data/bin/convert_to_should_syntax +0 -16
  84. data/bin/guard +0 -16
  85. data/bin/htmldiff +0 -16
  86. data/bin/httparty +0 -16
  87. data/bin/jeweler +0 -16
  88. data/bin/ldiff +0 -16
  89. data/bin/rake +0 -16
  90. data/bin/rake2thor +0 -16
  91. data/bin/rg +0 -16
  92. data/bin/ri +0 -16
  93. data/bin/rspec +0 -16
  94. data/bin/thor +0 -16
  95. data/doc/APIError.html +0 -241
  96. data/doc/APIKeyNotSet.html +0 -203
  97. data/doc/LICENSE.html +0 -133
  98. data/doc/README_rdoc.html +0 -173
  99. data/doc/ResourceNotFound.html +0 -203
  100. data/doc/Songkickr/Artist.html +0 -278
  101. data/doc/Songkickr/ArtistResult.html +0 -308
  102. data/doc/Songkickr/ConcertSetlistResult.html +0 -283
  103. data/doc/Songkickr/Event.html +0 -491
  104. data/doc/Songkickr/EventResult.html +0 -306
  105. data/doc/Songkickr/Location.html +0 -299
  106. data/doc/Songkickr/LocationResult.html +0 -309
  107. data/doc/Songkickr/Performance.html +0 -295
  108. data/doc/Songkickr/Remote.html +0 -864
  109. data/doc/Songkickr/Setlist.html +0 -360
  110. data/doc/Songkickr/SetlistItem.html +0 -244
  111. data/doc/Songkickr/Venue.html +0 -265
  112. data/doc/Songkickr.html +0 -261
  113. data/doc/created.rid +0 -16
  114. data/doc/images/add.png +0 -0
  115. data/doc/images/brick.png +0 -0
  116. data/doc/images/brick_link.png +0 -0
  117. data/doc/images/bug.png +0 -0
  118. data/doc/images/bullet_black.png +0 -0
  119. data/doc/images/bullet_toggle_minus.png +0 -0
  120. data/doc/images/bullet_toggle_plus.png +0 -0
  121. data/doc/images/date.png +0 -0
  122. data/doc/images/delete.png +0 -0
  123. data/doc/images/find.png +0 -0
  124. data/doc/images/loadingAnimation.gif +0 -0
  125. data/doc/images/macFFBgHack.png +0 -0
  126. data/doc/images/package.png +0 -0
  127. data/doc/images/page_green.png +0 -0
  128. data/doc/images/page_white_text.png +0 -0
  129. data/doc/images/page_white_width.png +0 -0
  130. data/doc/images/plugin.png +0 -0
  131. data/doc/images/ruby.png +0 -0
  132. data/doc/images/tag_blue.png +0 -0
  133. data/doc/images/tag_green.png +0 -0
  134. data/doc/images/transparent.png +0 -0
  135. data/doc/images/wrench.png +0 -0
  136. data/doc/images/wrench_orange.png +0 -0
  137. data/doc/images/zoom.png +0 -0
  138. data/doc/index.html +0 -110
  139. data/doc/js/darkfish.js +0 -153
  140. data/doc/js/jquery.js +0 -18
  141. data/doc/js/navigation.js +0 -142
  142. data/doc/js/quicksearch.js +0 -114
  143. data/doc/js/search.js +0 -94
  144. data/doc/js/search_index.js +0 -1
  145. data/doc/js/searcher.js +0 -228
  146. data/doc/js/thickbox-compressed.js +0 -10
  147. data/doc/lib/songkickr/artist_rb.html +0 -52
  148. data/doc/lib/songkickr/artist_result_rb.html +0 -52
  149. data/doc/lib/songkickr/concert_setlist_result_rb.html +0 -52
  150. data/doc/lib/songkickr/event_rb.html +0 -52
  151. data/doc/lib/songkickr/event_result_rb.html +0 -52
  152. data/doc/lib/songkickr/location_rb.html +0 -52
  153. data/doc/lib/songkickr/location_result_rb.html +0 -52
  154. data/doc/lib/songkickr/performance_rb.html +0 -52
  155. data/doc/lib/songkickr/remote_rb.html +0 -52
  156. data/doc/lib/songkickr/setlist_item_rb.html +0 -52
  157. data/doc/lib/songkickr/setlist_rb.html +0 -52
  158. data/doc/lib/songkickr/venue_rb.html +0 -52
  159. data/doc/lib/songkickr_rb.html +0 -56
  160. data/doc/rdoc.css +0 -543
  161. data/doc/table_of_contents.html +0 -185
  162. data/test/fixtures/locations_bar.json +0 -1
data/doc/js/navigation.js DELETED
@@ -1,142 +0,0 @@
1
- /*
2
- * Navigation allows movement using the arrow keys through the search results.
3
- *
4
- * When using this library you will need to set scrollIntoView to the
5
- * appropriate function for your layout. Use scrollInWindow if the container
6
- * is not scrollable and scrollInElement if the container is a separate
7
- * scrolling region.
8
- */
9
- Navigation = new function() {
10
- this.initNavigation = function() {
11
- var _this = this;
12
-
13
- $(document).keydown(function(e) {
14
- _this.onkeydown(e);
15
- }).keyup(function(e) {
16
- _this.onkeyup(e);
17
- });
18
-
19
- this.navigationActive = true;
20
- }
21
-
22
- this.setNavigationActive = function(state) {
23
- this.navigationActive = state;
24
- this.clearMoveTimeout();
25
- }
26
-
27
- this.onkeyup = function(e) {
28
- if (!this.navigationActive) return;
29
-
30
- switch(e.keyCode) {
31
- case 37: //Event.KEY_LEFT:
32
- case 38: //Event.KEY_UP:
33
- case 39: //Event.KEY_RIGHT:
34
- case 40: //Event.KEY_DOWN:
35
- this.clearMoveTimeout();
36
- break;
37
- }
38
- }
39
-
40
- this.onkeydown = function(e) {
41
- if (!this.navigationActive) return;
42
- switch(e.keyCode) {
43
- case 37: //Event.KEY_LEFT:
44
- if (this.moveLeft()) e.preventDefault();
45
- break;
46
- case 38: //Event.KEY_UP:
47
- if (e.keyCode == 38 || e.ctrlKey) {
48
- if (this.moveUp()) e.preventDefault();
49
- this.startMoveTimeout(false);
50
- }
51
- break;
52
- case 39: //Event.KEY_RIGHT:
53
- if (this.moveRight()) e.preventDefault();
54
- break;
55
- case 40: //Event.KEY_DOWN:
56
- if (e.keyCode == 40 || e.ctrlKey) {
57
- if (this.moveDown()) e.preventDefault();
58
- this.startMoveTimeout(true);
59
- }
60
- break;
61
- case 13: //Event.KEY_RETURN:
62
- if (this.$current)
63
- e.preventDefault();
64
- this.select(this.$current);
65
- break;
66
- }
67
- if (e.ctrlKey && e.shiftKey) this.select(this.$current);
68
- }
69
-
70
- this.clearMoveTimeout = function() {
71
- clearTimeout(this.moveTimeout);
72
- this.moveTimeout = null;
73
- }
74
-
75
- this.startMoveTimeout = function(isDown) {
76
- if (!$.browser.mozilla && !$.browser.opera) return;
77
- if (this.moveTimeout) this.clearMoveTimeout();
78
- var _this = this;
79
-
80
- var go = function() {
81
- if (!_this.moveTimeout) return;
82
- _this[isDown ? 'moveDown' : 'moveUp']();
83
- _this.moveTimout = setTimeout(go, 100);
84
- }
85
- this.moveTimeout = setTimeout(go, 200);
86
- }
87
-
88
- this.moveRight = function() {
89
- }
90
-
91
- this.moveLeft = function() {
92
- }
93
-
94
- this.move = function(isDown) {
95
- }
96
-
97
- this.moveUp = function() {
98
- return this.move(false);
99
- }
100
-
101
- this.moveDown = function() {
102
- return this.move(true);
103
- }
104
-
105
- /*
106
- * Scrolls to the given element in the scrollable element view.
107
- */
108
- this.scrollInElement = function(element, view) {
109
- var offset, viewHeight, viewScroll, height;
110
- offset = element.offsetTop;
111
- height = element.offsetHeight;
112
- viewHeight = view.offsetHeight;
113
- viewScroll = view.scrollTop;
114
-
115
- if (offset - viewScroll + height > viewHeight) {
116
- view.scrollTop = offset - viewHeight + height;
117
- }
118
- if (offset < viewScroll) {
119
- view.scrollTop = offset;
120
- }
121
- }
122
-
123
- /*
124
- * Scrolls to the given element in the window. The second argument is
125
- * ignored
126
- */
127
- this.scrollInWindow = function(element, ignored) {
128
- var offset, viewHeight, viewScroll, height;
129
- offset = element.offsetTop;
130
- height = element.offsetHeight;
131
- viewHeight = window.innerHeight;
132
- viewScroll = window.scrollY;
133
-
134
- if (offset - viewScroll + height > viewHeight) {
135
- window.scrollTo(window.scrollX, offset - viewHeight + height);
136
- }
137
- if (offset < viewScroll) {
138
- window.scrollTo(window.scrollX, offset);
139
- }
140
- }
141
- }
142
-
@@ -1,114 +0,0 @@
1
- /**
2
- *
3
- * JQuery QuickSearch - Hook up a form field to hide non-matching elements.
4
- * $Id: quicksearch.js 53 2009-01-07 02:52:03Z deveiant $
5
- *
6
- * Author: Michael Granger <mgranger@laika.com>
7
- *
8
- */
9
- jQuery.fn.quicksearch = function( target, searchElems, options ) {
10
- // console.debug( "Quicksearch fn" );
11
-
12
- var settings = {
13
- delay: 250,
14
- clearButton: false,
15
- highlightMatches: false,
16
- focusOnLoad: false,
17
- noSearchResultsIndicator: null
18
- };
19
- if ( options ) $.extend( settings, options );
20
-
21
- return jQuery(this).each( function() {
22
- // console.debug( "Creating a new quicksearch on %o for %o", this, searchElems );
23
- new jQuery.quicksearch( this, searchElems, settings );
24
- });
25
- };
26
-
27
-
28
- jQuery.quicksearch = function( searchBox, searchElems, settings ) {
29
- var timeout;
30
- var boxdiv = $(searchBox).parents('div').eq(0);
31
-
32
- function init() {
33
- setupKeyEventHandlers();
34
- focusOnLoad();
35
- };
36
-
37
- function setupKeyEventHandlers() {
38
- // console.debug( "Hooking up the 'keypress' event to %o", searchBox );
39
- $(searchBox).
40
- unbind( 'keyup' ).
41
- keyup( function(e) { return onSearchKey( e.keyCode ); });
42
- $(searchBox).
43
- unbind( 'keypress' ).
44
- keypress( function(e) {
45
- switch( e.which ) {
46
- // Execute the search on Enter, Tab, or Newline
47
- case 9:
48
- case 13:
49
- case 10:
50
- clearTimeout( timeout );
51
- e.preventDefault();
52
- doQuickSearch();
53
- break;
54
-
55
- // Allow backspace
56
- case 8:
57
- return true;
58
- break;
59
-
60
- // Only allow valid search characters
61
- default:
62
- return validQSChar( e.charCode );
63
- }
64
- });
65
- };
66
-
67
- function focusOnLoad() {
68
- if ( !settings.focusOnLoad ) return false;
69
- $(searchBox).focus();
70
- };
71
-
72
- function onSearchKey ( code ) {
73
- clearTimeout( timeout );
74
- // console.debug( "...scheduling search." );
75
- timeout = setTimeout( doQuickSearch, settings.delay );
76
- };
77
-
78
- function validQSChar( code ) {
79
- var c = String.fromCharCode( code );
80
- return (
81
- (c == ':') ||
82
- (c >= 'a' && c <= 'z') ||
83
- (c >= 'A' && c <= 'Z')
84
- );
85
- };
86
-
87
- function doQuickSearch() {
88
- var searchText = searchBox.value;
89
- var pat = new RegExp( searchText, "im" );
90
- var shownCount = 0;
91
-
92
- if ( settings.noSearchResultsIndicator ) {
93
- $('#' + settings.noSearchResultsIndicator).hide();
94
- }
95
-
96
- // All elements start out hidden
97
- $(searchElems).each( function(index) {
98
- var str = $(this).text();
99
-
100
- if ( pat.test(str) ) {
101
- shownCount += 1;
102
- $(this).fadeIn();
103
- } else {
104
- $(this).hide();
105
- }
106
- });
107
-
108
- if ( shownCount == 0 && settings.noSearchResultsIndicator ) {
109
- $('#' + settings.noSearchResultsIndicator).slideDown();
110
- }
111
- };
112
-
113
- init();
114
- };
data/doc/js/search.js DELETED
@@ -1,94 +0,0 @@
1
- Search = function(data, input, result) {
2
- this.data = data;
3
- this.$input = $(input);
4
- this.$result = $(result);
5
-
6
- this.$current = null;
7
- this.$view = this.$result.parent();
8
- this.searcher = new Searcher(data.index);
9
- this.init();
10
- }
11
-
12
- Search.prototype = $.extend({}, Navigation, new function() {
13
- var suid = 1;
14
-
15
- this.init = function() {
16
- var _this = this;
17
- var observer = function() {
18
- _this.search(_this.$input[0].value);
19
- };
20
- this.$input.keyup(observer);
21
- this.$input.click(observer); // mac's clear field
22
-
23
- this.searcher.ready(function(results, isLast) {
24
- _this.addResults(results, isLast);
25
- })
26
-
27
- this.initNavigation();
28
- this.setNavigationActive(false);
29
- }
30
-
31
- this.search = function(value, selectFirstMatch) {
32
- value = jQuery.trim(value).toLowerCase();
33
- if (value) {
34
- this.setNavigationActive(true);
35
- } else {
36
- this.setNavigationActive(false);
37
- }
38
-
39
- if (value == '') {
40
- this.lastQuery = value;
41
- this.$result.empty();
42
- this.setNavigationActive(false);
43
- } else if (value != this.lastQuery) {
44
- this.lastQuery = value;
45
- this.firstRun = true;
46
- this.searcher.find(value);
47
- }
48
- }
49
-
50
- this.addResults = function(results, isLast) {
51
- var target = this.$result.get(0);
52
- if (this.firstRun && (results.length > 0 || isLast)) {
53
- this.$current = null;
54
- this.$result.empty();
55
- }
56
-
57
- for (var i=0, l = results.length; i < l; i++) {
58
- target.appendChild(this.renderItem.call(this, results[i]));
59
- };
60
-
61
- if (this.firstRun && results.length > 0) {
62
- this.firstRun = false;
63
- this.$current = $(target.firstChild);
64
- this.$current.addClass('current');
65
- }
66
- if (jQuery.browser.msie) this.$element[0].className += '';
67
- }
68
-
69
- this.move = function(isDown) {
70
- if (!this.$current) return;
71
- var $next = this.$current[isDown ? 'next' : 'prev']();
72
- if ($next.length) {
73
- this.$current.removeClass('current');
74
- $next.addClass('current');
75
- this.scrollIntoView($next[0], this.$view[0]);
76
- this.$current = $next;
77
- }
78
- return true;
79
- }
80
-
81
- this.hlt = function(html) {
82
- return this.escapeHTML(html).
83
- replace(/\u0001/g, '<em>').
84
- replace(/\u0002/g, '</em>');
85
- }
86
-
87
- this.escapeHTML = function(html) {
88
- return html.replace(/[&<>]/g, function(c) {
89
- return '&#' + c.charCodeAt(0) + ';';
90
- });
91
- }
92
-
93
- });
94
-
@@ -1 +0,0 @@
1
- var search_data = {"index":{"searchIndex":["apierror","apikeynotset","resourcenotfound","songkickr","artist","artistresult","concertsetlistresult","event","eventresult","location","locationresult","performance","remote","setlist","setlistitem","venue","api_key()","api_key=()","artist_events()","artist_search()","concert_setlists()","event()","events()","get()","gigography()","location_search()","metro_areas_events()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","parse_performance()","parse_results()","parse_results()","parse_results()","parse_results()","parse_setlist_items()","start_hash_to_datetime()","to_s()","to_s()","to_s()","users_events()","users_tracked_artists()","venue()","license","readme"],"longSearchIndex":["apierror","apikeynotset","resourcenotfound","songkickr","songkickr::artist","songkickr::artistresult","songkickr::concertsetlistresult","songkickr::event","songkickr::eventresult","songkickr::location","songkickr::locationresult","songkickr::performance","songkickr::remote","songkickr::setlist","songkickr::setlistitem","songkickr::venue","songkickr::api_key()","songkickr::api_key=()","songkickr::remote#artist_events()","songkickr::remote#artist_search()","songkickr::remote#concert_setlists()","songkickr::remote#event()","songkickr::remote#events()","songkickr::remote#get()","songkickr::remote#gigography()","songkickr::remote#location_search()","songkickr::remote#metro_areas_events()","apierror::new()","songkickr::artist::new()","songkickr::artistresult::new()","songkickr::concertsetlistresult::new()","songkickr::event::new()","songkickr::eventresult::new()","songkickr::location::new()","songkickr::locationresult::new()","songkickr::performance::new()","songkickr::remote::new()","songkickr::setlist::new()","songkickr::setlistitem::new()","songkickr::venue::new()","songkickr::event#parse_performance()","songkickr::artistresult#parse_results()","songkickr::concertsetlistresult#parse_results()","songkickr::eventresult#parse_results()","songkickr::locationresult#parse_results()","songkickr::setlist#parse_setlist_items()","songkickr::event#start_hash_to_datetime()","apierror#to_s()","apikeynotset#to_s()","resourcenotfound#to_s()","songkickr::remote#users_events()","songkickr::remote#users_tracked_artists()","songkickr::remote#venue()","",""],"info":[["APIError","","APIError.html","",""],["APIKeyNotSet","","APIKeyNotSet.html","",""],["ResourceNotFound","","ResourceNotFound.html","",""],["Songkickr","","Songkickr.html","",""],["Songkickr::Artist","","Songkickr/Artist.html","","<p>A single artist\n\n<pre>{\n &quot;uri&quot;:&quot;http://www.songkick.com/artists/253846-radiohead&quot;,\n &quot;displayName&quot;:&quot;Radiohead&quot;, ...</pre>\n"],["Songkickr::ArtistResult","","Songkickr/ArtistResult.html","","<p>A class to represent the result hash of an Artist search.\n"],["Songkickr::ConcertSetlistResult","","Songkickr/ConcertSetlistResult.html","","<p>A class to represent the result hash of an Setlist search.\n<p>www.songkick.com/developer/setlists\n"],["Songkickr::Event","","Songkickr/Event.html","","<p>A single event\n\n<pre>{\n &quot;displayName&quot;: &quot;Vampire Weekend at O2 Academy Brixton (February 16, 2010)&quot;,\n &quot;type&quot;: ...</pre>\n"],["Songkickr::EventResult","","Songkickr/EventResult.html","","<p>A class to represent the result hash of an Event search.\n"],["Songkickr::Location","","Songkickr/Location.html","","<p>A class to represent the hash of a Location.\n\n<pre>{\n &quot;city&quot;:{\n &quot;displayName&quot;:&quot;London&quot;,\n &quot;country&quot;:{ ...</pre>\n"],["Songkickr::LocationResult","","Songkickr/LocationResult.html","","<p>TODO: very similar to concert_setlist_result, event_result, and\nartist_result, extract common stuff to …\n"],["Songkickr::Performance","","Songkickr/Performance.html","","<p>A single performance by an artist.\n\n<pre>{\n &quot;artist&quot;: {\n &quot;uri&quot;: &quot;http://www.songkick.com/artists/288696-vampire-weekend&quot;, ...</pre>\n"],["Songkickr::Remote","","Songkickr/Remote.html","","<p>Create an instance of the remote class to interact with the Songkick API.\n"],["Songkickr::Setlist","","Songkickr/Setlist.html","","<p>A single set list by an artist.\n<p>{\n\n<pre>&quot;displayName&quot;: &quot;N.E.R.D. at Glastonbury Festival 2009&quot;,\n&quot;artist&quot;: {\n ...</pre>\n"],["Songkickr::SetlistItem","","Songkickr/SetlistItem.html","","<p>A single set list item.\n\n<pre>{\n encore: 0\n name: &quot;Anti Matter &quot;\n}</pre>\n"],["Songkickr::Venue","","Songkickr/Venue.html","",""],["api_key","Songkickr","Songkickr.html#method-c-api_key","()","<p>Returns the Songkick API key In order to use the Songkick API, you must\nhave a Songkick API (their rule, …\n"],["api_key=","Songkickr","Songkickr.html#method-c-api_key-3D","(api_key)","<p>Set the API key. In the event you need to set the API key after\ninitializing the the remote.\n<p>Parameters …\n"],["artist_events","Songkickr::Remote","Songkickr/Remote.html#method-i-artist_events","(artist_id, query = {})","<p>Artist calendar (Upcoming)\n<p>Returns an array of Events.\n<p>www.songkick.com/developer/upcoming-events-for-artist …\n"],["artist_search","Songkickr::Remote","Songkickr/Remote.html#method-i-artist_search","(query={})","<p>Artist Search API\n<p>Returns Artist objects.\n<p>www.songkick.com/developer/artist-search\n"],["concert_setlists","Songkickr::Remote","Songkickr/Remote.html#method-i-concert_setlists","(event_id)","<p>Concert Setlists API\n<p>www.songkick.com/developer/setlists\n<p>Parameters\n"],["event","Songkickr::Remote","Songkickr/Remote.html#method-i-event","(event_id)","<p>Event API\n<p>www.songkick.com/developer/upcoming-events\n<p>Getting detailed information of a single event.\n"],["events","Songkickr::Remote","Songkickr/Remote.html#method-i-events","(query = {})","<p>Event Search API\n<p>www.songkick.com/developer/event-search\n<p>Parameters\n"],["get","Songkickr::Remote","Songkickr/Remote.html#method-i-get","(location, query_params = {})",""],["gigography","Songkickr::Remote","Songkickr/Remote.html#method-i-gigography","(artist_id, query= {})","<p>Gigography API\n<p>groups.google.com/group/songkick-api/browse_thread/thread/af15b9a6ad3c3513#\n<p>Parameters\n"],["location_search","Songkickr::Remote","Songkickr/Remote.html#method-i-location_search","(query = {})","<p>Location Search API\n<p>www.songkick.com/developer/location-search\n<p>Parameters\n"],["metro_areas_events","Songkickr::Remote","Songkickr/Remote.html#method-i-metro_areas_events","(metro_area_id, query = {})","<p>Metro Area Events (Upcoming)\n<p>Returns an array of Events.\n<p>www.songkick.com/developer/upcoming-events-for-metro-area …\n"],["new","APIError","APIError.html#method-c-new","(message = \"API Error\")",""],["new","Songkickr::Artist","Songkickr/Artist.html#method-c-new","(artist_hash = {})","<p>Accepts a hash of artist attributes.\n"],["new","Songkickr::ArtistResult","Songkickr/ArtistResult.html#method-c-new","(result_hash = {})","<p>Takes the result hash directly and parses out the page and total entries\nand finally passes off to the …\n"],["new","Songkickr::ConcertSetlistResult","Songkickr/ConcertSetlistResult.html#method-c-new","(result_hash = {})","<p>Takes the result ash and passes it to parse_results\n"],["new","Songkickr::Event","Songkickr/Event.html#method-c-new","(event_hash)",""],["new","Songkickr::EventResult","Songkickr/EventResult.html#method-c-new","(result_hash = {})","<p>Takes the result hash directly and parses out the page and total entries\nand finally passes off to the …\n"],["new","Songkickr::Location","Songkickr/Location.html#method-c-new","(location_hash)","<p>Takes a location hash. Handles the different city hashes from Event and\nLocation\n"],["new","Songkickr::LocationResult","Songkickr/LocationResult.html#method-c-new","(result_hash = {})","<p>Takes the result hash directly and parses out the page and total entries\nand finally passes off to the …\n"],["new","Songkickr::Performance","Songkickr/Performance.html#method-c-new","(performance_hash)","<p>Takes a the hash of the performance. Parses out an Artist object for the\nartist.\n"],["new","Songkickr::Remote","Songkickr/Remote.html#method-c-new","(api_key = nil)","<p>Create a new instance of the remote class to talk to Songkick\n<p>Get an API key for your app from developer.songkick.com/ …\n"],["new","Songkickr::Setlist","Songkickr/Setlist.html#method-c-new","(setlist_hash)","<p>Takes the setlist hash and parses out an Event and Artist and an array of\nSetlistItems.\n"],["new","Songkickr::SetlistItem","Songkickr/SetlistItem.html#method-c-new","(setlist_item_hash)","<p>Takes the set list item hash and parses a boolean out for encore.\n"],["new","Songkickr::Venue","Songkickr/Venue.html#method-c-new","(venue_hash)",""],["parse_performance","Songkickr::Event","Songkickr/Event.html#method-i-parse_performance","(performance_array = nil)","<p>Builds a list of Performance objects.\n"],["parse_results","Songkickr::ArtistResult","Songkickr/ArtistResult.html#method-i-parse_results","(results = {})","<p>Take the results hash directly and parse the artists into Artist objects.\n<p>Returns an array of Artists …\n"],["parse_results","Songkickr::ConcertSetlistResult","Songkickr/ConcertSetlistResult.html#method-i-parse_results","(results = {})","<p>Parses the setlist items into an array of SetlistItems\n"],["parse_results","Songkickr::EventResult","Songkickr/EventResult.html#method-i-parse_results","(results = {})",""],["parse_results","Songkickr::LocationResult","Songkickr/LocationResult.html#method-i-parse_results","(results = {})","<p>Take the results hash directly and parse the locations into Location\nobjects.\n<p>Returns an array of Locations …\n"],["parse_setlist_items","Songkickr::Setlist","Songkickr/Setlist.html#method-i-parse_setlist_items","(setlist_item_array = nil)","<p>Takes the array of setlist items and create SetLists\n"],["start_hash_to_datetime","Songkickr::Event","Songkickr/Event.html#method-i-start_hash_to_datetime","(start_hash)","<p>Takes the start hash and turns in into a DateTime object.\n"],["to_s","APIError","APIError.html#method-i-to_s","()",""],["to_s","APIKeyNotSet","APIKeyNotSet.html#method-i-to_s","()","<p>Warns of missing API key\n"],["to_s","ResourceNotFound","ResourceNotFound.html#method-i-to_s","()",""],["users_events","Songkickr::Remote","Songkickr/Remote.html#method-i-users_events","(username, query = {})","<p>User Events API\n<p>www.songkick.com/developer/upcoming-events-for-user\n<p>Parameters\n"],["users_tracked_artists","Songkickr::Remote","Songkickr/Remote.html#method-i-users_tracked_artists","(username, query = {})","<p>User Tracked Artists\n<p>www.songkick.com/developer/trackings\n<p>Parameters\n"],["venue","Songkickr::Remote","Songkickr/Remote.html#method-i-venue","(venue_id)","<p>Venue Search\n<p>www.songkick.com/developer/venue-details\n<p>Parameters\n"],["LICENSE","","LICENSE.html","","<p>Copyright © 2010-2011 Jared Mehle\n<p>Permission is hereby granted, free of charge, to any person obtaining …\n"],["README","","README_rdoc.html","","<p>songkickr\n<p>A Ruby wrapper around the Songkick API. Visit www.songkick.com/developer\nfor documentation on …\n"]]}}
data/doc/js/searcher.js DELETED
@@ -1,228 +0,0 @@
1
- Searcher = function(data) {
2
- this.data = data;
3
- this.handlers = [];
4
- }
5
-
6
- Searcher.prototype = new function() {
7
- // search is performed in chunks of 1000 for non-blocking user input
8
- var CHUNK_SIZE = 1000;
9
- // do not try to find more than 100 results
10
- var MAX_RESULTS = 100;
11
- var huid = 1;
12
- var suid = 1;
13
- var runs = 0;
14
-
15
- this.find = function(query) {
16
- var queries = splitQuery(query);
17
- var regexps = buildRegexps(queries);
18
- var highlighters = buildHilighters(queries);
19
- var state = { from: 0, pass: 0, limit: MAX_RESULTS, n: suid++};
20
- var _this = this;
21
-
22
- this.currentSuid = state.n;
23
-
24
- if (!query) return;
25
-
26
- var run = function() {
27
- // stop current search thread if new search started
28
- if (state.n != _this.currentSuid) return;
29
-
30
- var results =
31
- performSearch(_this.data, regexps, queries, highlighters, state);
32
- var hasMore = (state.limit > 0 && state.pass < 4);
33
-
34
- triggerResults.call(_this, results, !hasMore);
35
- if (hasMore) {
36
- setTimeout(run, 2);
37
- }
38
- runs++;
39
- };
40
- runs = 0;
41
-
42
- // start search thread
43
- run();
44
- }
45
-
46
- /* ----- Events ------ */
47
- this.ready = function(fn) {
48
- fn.huid = huid;
49
- this.handlers.push(fn);
50
- }
51
-
52
- /* ----- Utilities ------ */
53
- function splitQuery(query) {
54
- return jQuery.grep(query.split(/(\s+|::?|\(\)?)/), function(string) {
55
- return string.match(/\S/)
56
- });
57
- }
58
-
59
- function buildRegexps(queries) {
60
- return jQuery.map(queries, function(query) {
61
- return new RegExp(query.replace(/(.)/g, '([$1])([^$1]*?)'), 'i')
62
- });
63
- }
64
-
65
- function buildHilighters(queries) {
66
- return jQuery.map(queries, function(query) {
67
- return jQuery.map(query.split(''), function(l, i) {
68
- return '\u0001$' + (i*2+1) + '\u0002$' + (i*2+2);
69
- }).join('');
70
- });
71
- }
72
-
73
- // function longMatchRegexp(index, longIndex, regexps) {
74
- // for (var i = regexps.length - 1; i >= 0; i--){
75
- // if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) return false;
76
- // };
77
- // return true;
78
- // }
79
-
80
-
81
- /* ----- Mathchers ------ */
82
-
83
- /*
84
- * This record matches if the index starts with queries[0] and the record
85
- * matches all of the regexps
86
- */
87
- function matchPassBeginning(index, longIndex, queries, regexps) {
88
- if (index.indexOf(queries[0]) != 0) return false;
89
- for (var i=1, l = regexps.length; i < l; i++) {
90
- if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
91
- return false;
92
- };
93
- return true;
94
- }
95
-
96
- /*
97
- * This record matches if the longIndex starts with queries[0] and the
98
- * longIndex matches all of the regexps
99
- */
100
- function matchPassLongIndex(index, longIndex, queries, regexps) {
101
- if (longIndex.indexOf(queries[0]) != 0) return false;
102
- for (var i=1, l = regexps.length; i < l; i++) {
103
- if (!longIndex.match(regexps[i]))
104
- return false;
105
- };
106
- return true;
107
- }
108
-
109
- /*
110
- * This record matches if the index contains queries[0] and the record
111
- * matches all of the regexps
112
- */
113
- function matchPassContains(index, longIndex, queries, regexps) {
114
- if (index.indexOf(queries[0]) == -1) return false;
115
- for (var i=1, l = regexps.length; i < l; i++) {
116
- if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
117
- return false;
118
- };
119
- return true;
120
- }
121
-
122
- /*
123
- * This record matches if regexps[0] matches the index and the record
124
- * matches all of the regexps
125
- */
126
- function matchPassRegexp(index, longIndex, queries, regexps) {
127
- if (!index.match(regexps[0])) return false;
128
- for (var i=1, l = regexps.length; i < l; i++) {
129
- if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
130
- return false;
131
- };
132
- return true;
133
- }
134
-
135
-
136
- /* ----- Highlighters ------ */
137
- function highlightRegexp(info, queries, regexps, highlighters) {
138
- var result = createResult(info);
139
- for (var i=0, l = regexps.length; i < l; i++) {
140
- result.title = result.title.replace(regexps[i], highlighters[i]);
141
- result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
142
- };
143
- return result;
144
- }
145
-
146
- function hltSubstring(string, pos, length) {
147
- return string.substring(0, pos) + '\u0001' + string.substring(pos, pos + length) + '\u0002' + string.substring(pos + length);
148
- }
149
-
150
- function highlightQuery(info, queries, regexps, highlighters) {
151
- var result = createResult(info);
152
- var pos = 0;
153
- var lcTitle = result.title.toLowerCase();
154
-
155
- pos = lcTitle.indexOf(queries[0]);
156
- if (pos != -1) {
157
- result.title = hltSubstring(result.title, pos, queries[0].length);
158
- }
159
-
160
- result.namespace = result.namespace.replace(regexps[0], highlighters[0]);
161
- for (var i=1, l = regexps.length; i < l; i++) {
162
- result.title = result.title.replace(regexps[i], highlighters[i]);
163
- result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
164
- };
165
- return result;
166
- }
167
-
168
- function createResult(info) {
169
- var result = {};
170
- result.title = info[0];
171
- result.namespace = info[1];
172
- result.path = info[2];
173
- result.params = info[3];
174
- result.snippet = info[4];
175
- return result;
176
- }
177
-
178
- /* ----- Searching ------ */
179
- function performSearch(data, regexps, queries, highlighters, state) {
180
- var searchIndex = data.searchIndex;
181
- var longSearchIndex = data.longSearchIndex;
182
- var info = data.info;
183
- var result = [];
184
- var i = state.from;
185
- var l = searchIndex.length;
186
- var togo = CHUNK_SIZE;
187
- var matchFunc, hltFunc;
188
-
189
- while (state.pass < 4 && state.limit > 0 && togo > 0) {
190
- if (state.pass == 0) {
191
- matchFunc = matchPassBeginning;
192
- hltFunc = highlightQuery;
193
- } else if (state.pass == 1) {
194
- matchFunc = matchPassLongIndex;
195
- hltFunc = highlightQuery;
196
- } else if (state.pass == 2) {
197
- matchFunc = matchPassContains;
198
- hltFunc = highlightQuery;
199
- } else if (state.pass == 3) {
200
- matchFunc = matchPassRegexp;
201
- hltFunc = highlightRegexp;
202
- }
203
-
204
- for (; togo > 0 && i < l && state.limit > 0; i++, togo--) {
205
- if (info[i].n == state.n) continue;
206
- if (matchFunc(searchIndex[i], longSearchIndex[i], queries, regexps)) {
207
- info[i].n = state.n;
208
- result.push(hltFunc(info[i], queries, regexps, highlighters));
209
- state.limit--;
210
- }
211
- };
212
- if (searchIndex.length <= i) {
213
- state.pass++;
214
- i = state.from = 0;
215
- } else {
216
- state.from = i;
217
- }
218
- }
219
- return result;
220
- }
221
-
222
- function triggerResults(results, isLast) {
223
- jQuery.each(this.handlers, function(i, fn) {
224
- fn.call(this, results, isLast)
225
- })
226
- }
227
- }
228
-
@@ -1,10 +0,0 @@
1
- /*
2
- * Thickbox 3 - One Box To Rule Them All.
3
- * By Cody Lindley (http://www.codylindley.com)
4
- * Copyright (c) 2007 cody lindley
5
- * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
6
- */
7
-
8
- var tb_pathToImage = "../images/loadingAnimation.gif";
9
-
10
- eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$(o).2S(9(){1u(\'a.18, 3n.18, 3i.18\');1w=1p 1t();1w.L=2H});9 1u(b){$(b).s(9(){6 t=X.Q||X.1v||M;6 a=X.u||X.23;6 g=X.1N||P;19(t,a,g);X.2E();H P})}9 19(d,f,g){3m{3(2t o.v.J.2i==="2g"){$("v","11").r({A:"28%",z:"28%"});$("11").r("22","2Z");3(o.1Y("1F")===M){$("v").q("<U 5=\'1F\'></U><4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}n{3(o.1Y("B")===M){$("v").q("<4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}3(1K()){$("#B").1J("2B")}n{$("#B").1J("2z")}3(d===M){d=""}$("v").q("<4 5=\'K\'><1I L=\'"+1w.L+"\' /></4>");$(\'#K\').2y();6 h;3(f.O("?")!==-1){h=f.3l(0,f.O("?"))}n{h=f}6 i=/\\.2s$|\\.2q$|\\.2m$|\\.2l$|\\.2k$/;6 j=h.1C().2h(i);3(j==\'.2s\'||j==\'.2q\'||j==\'.2m\'||j==\'.2l\'||j==\'.2k\'){1D="";1G="";14="";1z="";1x="";R="";1n="";1r=P;3(g){E=$("a[@1N="+g+"]").36();25(D=0;((D<E.1c)&&(R===""));D++){6 k=E[D].u.1C().2h(i);3(!(E[D].u==f)){3(1r){1z=E[D].Q;1x=E[D].u;R="<1e 5=\'1X\'>&1d;&1d;<a u=\'#\'>2T &2R;</a></1e>"}n{1D=E[D].Q;1G=E[D].u;14="<1e 5=\'1U\'>&1d;&1d;<a u=\'#\'>&2O; 2N</a></1e>"}}n{1r=1b;1n="1t "+(D+1)+" 2L "+(E.1c)}}}S=1p 1t();S.1g=9(){S.1g=M;6 a=2x();6 x=a[0]-1M;6 y=a[1]-1M;6 b=S.z;6 c=S.A;3(b>x){c=c*(x/b);b=x;3(c>y){b=b*(y/c);c=y}}n 3(c>y){b=b*(y/c);c=y;3(b>x){c=c*(x/b);b=x}}13=b+30;1a=c+2G;$("#8").q("<a u=\'\' 5=\'1L\' Q=\'1o\'><1I 5=\'2F\' L=\'"+f+"\' z=\'"+b+"\' A=\'"+c+"\' 23=\'"+d+"\'/></a>"+"<4 5=\'2D\'>"+d+"<4 5=\'2C\'>"+1n+14+R+"</4></4><4 5=\'2A\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4>");$("#Z").s(G);3(!(14==="")){9 12(){3($(o).N("s",12)){$(o).N("s",12)}$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1D,1G,g);H P}$("#1U").s(12)}3(!(R==="")){9 1i(){$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1z,1x,g);H P}$("#1X").s(1i)}o.1h=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}n 3(I==3k){3(!(R=="")){o.1h="";1i()}}n 3(I==3j){3(!(14=="")){o.1h="";12()}}};16();$("#K").C();$("#1L").s(G);$("#8").r({Y:"T"})};S.L=f}n{6 l=f.2r(/^[^\\?]+\\??/,\'\');6 m=2p(l);13=(m[\'z\']*1)+30||3h;1a=(m[\'A\']*1)+3g||3f;W=13-30;V=1a-3e;3(f.O(\'2j\')!=-1){1E=f.1B(\'3d\');$("#15").C();3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4></4><U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\' > </U>")}n{$("#B").N();$("#8").q("<U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\'> </U>")}}n{3($("#8").r("Y")!="T"){3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\'>1l</a> 1k 1j 1s</4></4><4 5=\'F\' J=\'z:"+W+"p;A:"+V+"p\'></4>")}n{$("#B").N();$("#8").q("<4 5=\'F\' 3c=\'3b\' J=\'z:"+W+"p;A:"+V+"p;\'></4>")}}n{$("#F")[0].J.z=W+"p";$("#F")[0].J.A=V+"p";$("#F")[0].3a=0;$("#1H").11(d)}}$("#Z").s(G);3(f.O(\'37\')!=-1){$("#F").q($(\'#\'+m[\'26\']).1T());$("#8").24(9(){$(\'#\'+m[\'26\']).q($("#F").1T())});16();$("#K").C();$("#8").r({Y:"T"})}n 3(f.O(\'2j\')!=-1){16();3($.1q.35){$("#K").C();$("#8").r({Y:"T"})}}n{$("#F").34(f+="&1y="+(1p 33().32()),9(){16();$("#K").C();1u("#F a.18");$("#8").r({Y:"T"})})}}3(!m[\'1A\']){o.21=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}}}}31(e){}}9 1m(){$("#K").C();$("#8").r({Y:"T"})}9 G(){$("#2Y").N("s");$("#Z").N("s");$("#8").2X("2W",9(){$(\'#8,#B,#1F\').2V("24").N().C()});$("#K").C();3(2t o.v.J.2i=="2g"){$("v","11").r({A:"1Z",z:"1Z"});$("11").r("22","")}o.1h="";o.21="";H P}9 16(){$("#8").r({2U:\'-\'+20((13/2),10)+\'p\',z:13+\'p\'});3(!(1V.1q.2Q&&1V.1q.2P<7)){$("#8").r({38:\'-\'+20((1a/2),10)+\'p\'})}}9 2p(a){6 b={};3(!a){H b}6 c=a.1B(/[;&]/);25(6 i=0;i<c.1c;i++){6 d=c[i].1B(\'=\');3(!d||d.1c!=2){39}6 e=2a(d[0]);6 f=2a(d[1]);f=f.2r(/\\+/g,\' \');b[e]=f}H b}9 2x(){6 a=o.2M;6 w=1S.2o||1R.2o||(a&&a.1Q)||o.v.1Q;6 h=1S.1P||1R.1P||(a&&a.2n)||o.v.2n;1O=[w,h];H 1O}9 1K(){6 a=2K.2J.1C();3(a.O(\'2I\')!=-1&&a.O(\'3o\')!=-1){H 1b}}',62,211,'|||if|div|id|var||TB_window|function||||||||||||||else|document|px|append|css|click||href|body||||width|height|TB_overlay|remove|TB_Counter|TB_TempArray|TB_ajaxContent|tb_remove|return|keycode|style|TB_load|src|null|unbind|indexOf|false|title|TB_NextHTML|imgPreloader|block|iframe|ajaxContentH|ajaxContentW|this|display|TB_closeWindowButton||html|goPrev|TB_WIDTH|TB_PrevHTML|TB_iframeContent|tb_position||thickbox|tb_show|TB_HEIGHT|true|length|nbsp|span|Math|onload|onkeydown|goNext|Esc|or|close|tb_showIframe|TB_imageCount|Close|new|browser|TB_FoundURL|Key|Image|tb_init|name|imgLoader|TB_NextURL|random|TB_NextCaption|modal|split|toLowerCase|TB_PrevCaption|urlNoQuery|TB_HideSelect|TB_PrevURL|TB_ajaxWindowTitle|img|addClass|tb_detectMacXFF|TB_ImageOff|150|rel|arrayPageSize|innerHeight|clientWidth|self|window|children|TB_prev|jQuery|frameborder|TB_next|getElementById|auto|parseInt|onkeyup|overflow|alt|unload|for|inlineId||100||unescape|1000|round|hspace|TB_closeAjaxWindow|TB_title|undefined|match|maxHeight|TB_iframe|bmp|gif|png|clientHeight|innerWidth|tb_parseQuery|jpeg|replace|jpg|typeof|which|keyCode|event|tb_getPageSize|show|TB_overlayBG|TB_closeWindow|TB_overlayMacFFBGHack|TB_secondLine|TB_caption|blur|TB_Image|60|tb_pathToImage|mac|userAgent|navigator|of|documentElement|Prev|lt|version|msie|gt|ready|Next|marginLeft|trigger|fast|fadeOut|TB_imageOff|hidden||catch|getTime|Date|load|safari|get|TB_inline|marginTop|continue|scrollTop|TB_modal|class|TB_|45|440|40|630|input|188|190|substr|try|area|firefox'.split('|'),0,{}))
@@ -1,52 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
-
5
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
- <head>
7
- <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
8
-
9
- <title>File: artist.rb [RDoc Documentation]</title>
10
-
11
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
12
-
13
- <script src="../../js/jquery.js" type="text/javascript"
14
- charset="utf-8"></script>
15
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
16
- charset="utf-8"></script>
17
- <script src="../../js/quicksearch.js" type="text/javascript"
18
- charset="utf-8"></script>
19
- <script src="../../js/darkfish.js" type="text/javascript"
20
- charset="utf-8"></script>
21
- </head>
22
-
23
- <body class="file file-popup">
24
- <div id="metadata">
25
- <dl>
26
- <dt class="modified-date">Last Modified</dt>
27
- <dd class="modified-date">Sun Jun 05 16:11:24 -0500 2011</dd>
28
-
29
-
30
- <dt class="requires">Requires</dt>
31
- <dd class="requires">
32
- <ul>
33
-
34
- </ul>
35
- </dd>
36
-
37
-
38
-
39
- </dl>
40
- </div>
41
-
42
- <div id="documentation">
43
-
44
- <div class="description">
45
- <h2>Description</h2>
46
-
47
- </div>
48
-
49
- </div>
50
- </body>
51
- </html>
52
-