songkickr 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.bundle/config +2 -0
- data/.gitignore +1 -0
- data/.travis.yml +8 -0
- data/Gemfile.lock +42 -22
- data/LICENSE +1 -1
- data/README.rdoc +14 -9
- data/Rakefile +3 -4
- data/lib/songkickr/artist.rb +2 -2
- data/lib/songkickr/artist_result.rb +4 -24
- data/lib/songkickr/calendar_entry.rb +23 -0
- data/lib/songkickr/calendar_result.rb +10 -0
- data/lib/songkickr/concert_setlist_result.rb +5 -27
- data/lib/songkickr/event.rb +8 -14
- data/lib/songkickr/event_result.rb +5 -23
- data/lib/songkickr/location.rb +4 -4
- data/lib/songkickr/location_result.rb +5 -30
- data/lib/songkickr/metro_area.rb +28 -0
- data/lib/songkickr/metro_area_result.rb +12 -0
- data/lib/songkickr/performance.rb +17 -12
- data/lib/songkickr/remote.rb +18 -198
- data/lib/songkickr/remote_api/artist_details.rb +17 -0
- data/lib/songkickr/remote_api/event_details.rb +17 -0
- data/lib/songkickr/remote_api/past_events.rb +48 -0
- data/lib/songkickr/remote_api/similar_artists.rb +14 -0
- data/lib/songkickr/remote_api/upcoming_events.rb +125 -0
- data/lib/songkickr/remote_api/user_events_and_trackings.rb +143 -0
- data/lib/songkickr/remote_api/venue_details.rb +16 -0
- data/lib/songkickr/result_set.rb +27 -0
- data/lib/songkickr/setlist.rb +7 -12
- data/lib/songkickr/setlist_item.rb +1 -1
- data/lib/songkickr/tracking.rb +18 -0
- data/lib/songkickr/tracking_result.rb +24 -0
- data/lib/songkickr/venue.rb +10 -2
- data/lib/songkickr/venue_result.rb +32 -0
- data/lib/songkickr/version.rb +1 -1
- data/lib/songkickr.rb +24 -17
- data/songkickr.gemspec +17 -44
- data/test/fixtures/event_7391451.json +732 -1
- data/test/fixtures/location_search.json +38 -0
- data/test/fixtures/metro_area.json +11 -0
- data/test/fixtures/users_attendance_calendar.json +243 -0
- data/test/fixtures/vcr/artist_events.yml +1394 -0
- data/test/fixtures/vcr/artist_search.yml +38 -0
- data/test/fixtures/vcr/artists_gigography.yml +187 -0
- data/test/fixtures/vcr/concert_setlists.yml +47 -0
- data/test/fixtures/vcr/event_search.yml +110 -0
- data/test/fixtures/vcr/invalid_api_key.yml +6 -36
- data/test/fixtures/vcr/invalid_artist_id.yml +6 -6
- data/test/fixtures/vcr/invalid_event_id.yml +6 -6
- data/test/fixtures/vcr/invalid_user.yml +6 -6
- data/test/fixtures/vcr/invalid_venue_id.yml +6 -6
- data/test/fixtures/vcr/location_search.yml +42 -0
- data/test/fixtures/vcr/metro_areas_events.yml +1535 -0
- data/test/fixtures/vcr/similar_artists.yml +64 -0
- data/test/fixtures/vcr/users_artist_tracking.yml +99 -0
- data/test/fixtures/vcr/users_attendance.yml +66 -0
- data/test/fixtures/vcr/users_attendance_calendar.yml +51 -0
- data/test/fixtures/vcr/users_events.yml +809 -0
- data/test/fixtures/vcr/users_gigography.yml +2782 -0
- data/test/fixtures/vcr/users_metro_area_tracking.yml +66 -0
- data/test/fixtures/vcr/users_muted_artists.yml +66 -0
- data/test/fixtures/vcr/users_tracked_artists.yml +75 -0
- data/test/fixtures/vcr/users_tracked_events_calendar.yml +1901 -0
- data/test/fixtures/vcr/users_tracked_metro_areas.yml +37 -0
- data/test/fixtures/vcr/valid_artist.yml +9 -9
- data/test/fixtures/vcr/valid_event.yml +103 -38
- data/test/fixtures/vcr/valid_user.yml +634 -44
- data/test/fixtures/vcr/valid_venue.yml +25 -26
- data/test/fixtures/vcr/venue_calendar.yml +500 -0
- data/test/fixtures/vcr/venue_search.yml +42 -0
- data/test/helper.rb +1 -27
- data/test/songkickr/test_calendar_entry.rb +15 -0
- data/test/songkickr/test_event.rb +8 -9
- data/test/songkickr/test_location.rb +11 -11
- data/test/songkickr/test_metro_area.rb +17 -0
- data/test/songkickr/test_remote.rb +149 -3
- data/test/songkickr/test_setlist_item.rb +20 -0
- data/test/songkickr/test_venue.rb +1 -2
- data/test.rb +3 -5
- metadata +120 -152
- data/bin/autospec +0 -16
- data/bin/convert_to_should_syntax +0 -16
- data/bin/guard +0 -16
- data/bin/htmldiff +0 -16
- data/bin/httparty +0 -16
- data/bin/jeweler +0 -16
- data/bin/ldiff +0 -16
- data/bin/rake +0 -16
- data/bin/rake2thor +0 -16
- data/bin/rg +0 -16
- data/bin/ri +0 -16
- data/bin/rspec +0 -16
- data/bin/thor +0 -16
- data/doc/APIError.html +0 -241
- data/doc/APIKeyNotSet.html +0 -203
- data/doc/LICENSE.html +0 -133
- data/doc/README_rdoc.html +0 -173
- data/doc/ResourceNotFound.html +0 -203
- data/doc/Songkickr/Artist.html +0 -278
- data/doc/Songkickr/ArtistResult.html +0 -308
- data/doc/Songkickr/ConcertSetlistResult.html +0 -283
- data/doc/Songkickr/Event.html +0 -491
- data/doc/Songkickr/EventResult.html +0 -306
- data/doc/Songkickr/Location.html +0 -299
- data/doc/Songkickr/LocationResult.html +0 -309
- data/doc/Songkickr/Performance.html +0 -295
- data/doc/Songkickr/Remote.html +0 -864
- data/doc/Songkickr/Setlist.html +0 -360
- data/doc/Songkickr/SetlistItem.html +0 -244
- data/doc/Songkickr/Venue.html +0 -265
- data/doc/Songkickr.html +0 -261
- data/doc/created.rid +0 -16
- data/doc/images/add.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -110
- data/doc/js/darkfish.js +0 -153
- data/doc/js/jquery.js +0 -18
- data/doc/js/navigation.js +0 -142
- data/doc/js/quicksearch.js +0 -114
- data/doc/js/search.js +0 -94
- data/doc/js/search_index.js +0 -1
- data/doc/js/searcher.js +0 -228
- data/doc/js/thickbox-compressed.js +0 -10
- data/doc/lib/songkickr/artist_rb.html +0 -52
- data/doc/lib/songkickr/artist_result_rb.html +0 -52
- data/doc/lib/songkickr/concert_setlist_result_rb.html +0 -52
- data/doc/lib/songkickr/event_rb.html +0 -52
- data/doc/lib/songkickr/event_result_rb.html +0 -52
- data/doc/lib/songkickr/location_rb.html +0 -52
- data/doc/lib/songkickr/location_result_rb.html +0 -52
- data/doc/lib/songkickr/performance_rb.html +0 -52
- data/doc/lib/songkickr/remote_rb.html +0 -52
- data/doc/lib/songkickr/setlist_item_rb.html +0 -52
- data/doc/lib/songkickr/setlist_rb.html +0 -52
- data/doc/lib/songkickr/venue_rb.html +0 -52
- data/doc/lib/songkickr_rb.html +0 -56
- data/doc/rdoc.css +0 -543
- data/doc/table_of_contents.html +0 -185
- 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
|
-
|
data/doc/js/quicksearch.js
DELETED
@@ -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
|
-
|
data/doc/js/search_index.js
DELETED
@@ -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 "uri":"http://www.songkick.com/artists/253846-radiohead",\n "displayName":"Radiohead", ...</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 "displayName": "Vampire Weekend at O2 Academy Brixton (February 16, 2010)",\n "type": ...</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 "city":{\n "displayName":"London",\n "country":{ ...</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 "artist": {\n "uri": "http://www.songkick.com/artists/288696-vampire-weekend", ...</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>"displayName": "N.E.R.D. at Glastonbury Festival 2009",\n"artist": {\n ...</pre>\n"],["Songkickr::SetlistItem","","Songkickr/SetlistItem.html","","<p>A single set list item.\n\n<pre>{\n encore: 0\n name: "Anti Matter "\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
|
-
|