sequenceserver-beta 0.8.7.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE.Apache.txt +176 -0
  4. data/LICENSE.txt +69 -0
  5. data/README.txt +5 -0
  6. data/bin/sequenceserver +82 -0
  7. data/config.ru +6 -0
  8. data/example.config.yml +39 -0
  9. data/lib/profile_code.rb +217 -0
  10. data/lib/sequenceserver.rb +527 -0
  11. data/lib/sequenceserver/blast.rb +92 -0
  12. data/lib/sequenceserver/customisation.rb +60 -0
  13. data/lib/sequenceserver/database.rb +29 -0
  14. data/lib/sequenceserver/database_formatter.rb +190 -0
  15. data/lib/sequenceserver/helpers.rb +136 -0
  16. data/lib/sequenceserver/sequencehelpers.rb +93 -0
  17. data/lib/sequenceserver/sinatralikeloggerformatter.rb +12 -0
  18. data/lib/sequenceserver/version.rb +9 -0
  19. data/public/css/beige.css.css +254 -0
  20. data/public/css/bootstrap.dropdown.css +29 -0
  21. data/public/css/bootstrap.icons.css +155 -0
  22. data/public/css/bootstrap.min.css +415 -0
  23. data/public/css/bootstrap.modal.css +28 -0
  24. data/public/css/custom.css +232 -0
  25. data/public/img/glyphicons-halflings-white.png +0 -0
  26. data/public/img/glyphicons-halflings.png +0 -0
  27. data/public/js/bootstrap.dropdown.js +92 -0
  28. data/public/js/bootstrap.modal.js +7 -0
  29. data/public/js/bootstrap.transition.js +7 -0
  30. data/public/js/jquery-scrollspy.js +98 -0
  31. data/public/js/jquery-ui.js +14987 -0
  32. data/public/js/jquery.activity.js +10 -0
  33. data/public/js/jquery.enablePlaceholder.min.js +10 -0
  34. data/public/js/jquery.js +5 -0
  35. data/public/js/sequenceserver.blast.js +208 -0
  36. data/public/js/sequenceserver.js +304 -0
  37. data/public/js/store.min.js +2 -0
  38. data/sequenceserver.gemspec +49 -0
  39. data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta +5486 -0
  40. data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nhr +0 -0
  41. data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nin +0 -0
  42. data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nsq +0 -0
  43. data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta +6449 -0
  44. data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.phr +0 -0
  45. data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.pin +0 -0
  46. data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.psq +0 -0
  47. data/tests/run +26 -0
  48. data/tests/test_sequencehelpers.rb +77 -0
  49. data/tests/test_sequenceserver_blast.rb +60 -0
  50. data/tests/test_ui.rb +104 -0
  51. data/tests/test_ui.rb~ +104 -0
  52. data/tests/ui.specs.todo +10 -0
  53. data/views/500.erb +22 -0
  54. data/views/_options.erb +144 -0
  55. data/views/search.erb +220 -0
  56. metadata +226 -0
@@ -0,0 +1,93 @@
1
+ module SequenceServer
2
+ # Module to collect some sequence-related helper functions
3
+ module SequenceHelpers
4
+
5
+ # copied from bioruby's Bio::Sequence
6
+ # returns a Hash. Eg: composition("asdfasdfffffasdf")
7
+ # => {"a"=>3, "d"=>3, "f"=>7, "s"=>3}
8
+ def composition(sequence_string)
9
+ count = Hash.new(0)
10
+ sequence_string.scan(/./) do |x|
11
+ count[x] += 1
12
+ end
13
+ return count
14
+ end
15
+
16
+ # Strips all non-letter characters. guestimates sequence based on that.
17
+ # If less than 10 useable characters... returns nil
18
+ # If more than 90% ACGTU returns :nucleotide. else returns :protein
19
+ def guess_sequence_type(sequence_string)
20
+ cleaned_sequence = sequence_string.gsub(/[^A-Z]/i, '') # removing non-letter characters
21
+ cleaned_sequence.gsub!(/[NX]/i, '') # removing ambiguous characters
22
+
23
+ return nil if cleaned_sequence.length < 10 # conservative
24
+
25
+ composition = composition(cleaned_sequence)
26
+ composition_NAs = composition.select { |character, count|character.match(/[ACGTU]/i) } # only putative NAs
27
+ putative_NA_counts = composition_NAs.collect { |key_value_array| key_value_array[1] } # only count, not char
28
+ putative_NA_sum = putative_NA_counts.inject { |sum, n| sum + n } # count of all putative NA
29
+ putative_NA_sum = 0 if putative_NA_sum.nil?
30
+
31
+ if putative_NA_sum > (0.9 * cleaned_sequence.length)
32
+ return :nucleotide
33
+ else
34
+ return :protein
35
+ end
36
+ end
37
+
38
+ # splits input at putative fasta definition lines (like ">adsfadsf"), guesses sequence type for each sequence.
39
+ # if not enough sequence to determine, returns nil.
40
+ # if 2 kinds of sequence mixed together, raises ArgumentError
41
+ # otherwise, returns :nucleotide or :protein
42
+ def type_of_sequences(fasta_format_string)
43
+ # the first sequence does not need to have a fasta definition line
44
+ sequences = fasta_format_string.split(/^>.*$/).delete_if { |seq| seq.empty? }
45
+
46
+ # get all sequence types
47
+ sequence_types = sequences.collect { |seq| guess_sequence_type(seq) }.uniq.compact
48
+
49
+ return nil if sequence_types.empty?
50
+
51
+ if sequence_types.length == 1
52
+ return sequence_types.first # there is only one (but yes its an array)
53
+ else
54
+ raise ArgumentError, "Insufficient info to determine sequence type. Cleaned queries are: #{ sequences.to_s }"
55
+ end
56
+ end
57
+
58
+ def sequence_from_blastdb(ids, db) # helpful when displaying parsed blast results
59
+ # we know how to handle an Array of ids
60
+ ids = ids.join(',') if ids.is_a? Array
61
+
62
+ # we don't know what to do if the arguments ain't String
63
+ raise TypeError unless ids.is_a? String and db.is_a? String
64
+
65
+ # query now!
66
+ #
67
+ # If `blastdbcmd` throws error, we assume sequence not found.
68
+ blastdbcmd = settings.binaries['blastdbcmd']
69
+ %x|#{blastdbcmd} -db #{db} -entry '#{ids}' 2> /dev/null|
70
+ end
71
+
72
+ # Given a sequence_id and databases, apply the default (standard)
73
+ # way to convert a sequence_id into a hyperlink, so that the
74
+ # blast results include hyperlinks.
75
+ def construct_standard_sequence_hyperlink(options)
76
+ if options[:sequence_id].match(/^[^ ]/) #if there is a space right after the '>', makeblastdb was run without -parse_seqids
77
+ # By default, add a link to a fasta file of the sequence (if makeblastdb was called with -parse_seqids)
78
+
79
+ sid = options[:sequence_id].gsub(/<\/?[^>]*>/, '') # strip html
80
+ cid = sid[/^(\S+)\s*.*/, 1] # get id part
81
+ id = cid.include?('|') ? cid.split('|')[1] : cid.split('|')[0]
82
+ @all_retrievable_ids ||= []
83
+ @all_retrievable_ids.push(id)
84
+
85
+ link = "/get_sequence/?id=#{id}&db=#{options[:databases].join(' ')}" # several dbs... separate by ' '
86
+ return link
87
+ else
88
+ # do nothing - link == nil means no link will be incorporated
89
+ return nil
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,12 @@
1
+ module SequenceServer
2
+ # We change Logging format so that it is consistent with Sinatra's
3
+ class SinatraLikeLogFormatter < Logger::Formatter
4
+ MyFormat = "[%s] %s %s\n"
5
+ def initialize
6
+ self.datetime_format = "%Y-%m-%d %H:%M:%S"
7
+ end
8
+ def call(severity, time, progname, msg)
9
+ MyFormat % [format_datetime(time), severity, msg2str(msg)]
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module SequenceServer
2
+
3
+ # Return version number of SequenceServer from the gemspec. Version number
4
+ # is read from gemspec, which might fail on older versions of Bundler or
5
+ # RubyGems. Return `nil` if version number couldn't be determined.
6
+ def self.version
7
+ Bundler.rubygems.loaded_specs('sequenceserver').version rescue nil
8
+ end
9
+ end
@@ -0,0 +1,254 @@
1
+ body {
2
+ background-color: #2B3E42;
3
+ /*background: #3f4555;*/
4
+ font-family: Tahoma, Arial, sans-serif;
5
+ }
6
+
7
+ .container {
8
+ width: 800px;
9
+ margin: 50px auto;
10
+ background-color: white;
11
+ border: 2px solid white;
12
+ border-radius: 10px;
13
+ -moz-border-radius: 10px;
14
+ }
15
+
16
+ h1 {
17
+ margin: 0px;
18
+ padding: 0px;
19
+ }
20
+
21
+ .banner {
22
+ font-weight: bold;
23
+ background: #ebcd7b;
24
+ font-size: 300%;
25
+ font-family: Tahoma, Arial, sans-serif;
26
+ color: black;
27
+ padding: 2%;
28
+ margin-bottom: 2%;
29
+
30
+ border-bottom-left-radius: 0px;
31
+ border-bottom-right-radius: 0px;
32
+ border-top-left-radius: 10px;
33
+ border-top-right-radius: 10px;
34
+
35
+ -moz-border-radius-bottomleft: 0px;
36
+ -moz-border-radius-bottomright: 0px;
37
+ -moz-border-radius-topleft: 10px;
38
+ -moz-border-radius-topright: 10px;
39
+
40
+ }
41
+
42
+ .underbar {
43
+ background-color: #ebcd7b;
44
+ font-family:arial;
45
+ font-size: 12px;
46
+ text-align: center;
47
+ color: #333333;
48
+ padding: 1px 1px 1px 1px;
49
+ margin: 2% 0 0 0;
50
+ border-bottom-left-radius: 10px;
51
+ border-bottom-right-radius: 10px;
52
+ }
53
+
54
+
55
+ .entryfield {
56
+ padding:0;
57
+ margin:0;
58
+ }
59
+
60
+ .entryfield textarea {
61
+ padding:0;
62
+ margin:0;
63
+ width:100%;
64
+ height: 168px;
65
+ border-color:black;
66
+ }
67
+
68
+ .blastmethods {
69
+ float : right;
70
+ background : #222222;
71
+ border : none;
72
+ height : 150px;
73
+
74
+ border-top-right-radius : 10px;
75
+ border-top-left-radius : 0px;
76
+ border-bottom-right-radius: 10px;
77
+ border-bottom-left-radius : 0px;
78
+
79
+ -moz-border-radius-topright: 10px;
80
+ -moz-border-radius-topleft: 0px;
81
+ -moz-border-radius-bottomright: 10px;
82
+ -moz-border-radius-bottomleft: 0px;
83
+
84
+
85
+ font-size : 1.5em;
86
+ font-family: Tahoma, Arial, sans-serif;
87
+ color: black;
88
+ margin:0;
89
+ padding:0;
90
+ }
91
+
92
+ fieldset {
93
+ margin:0;
94
+ padding:0;
95
+ }
96
+
97
+ .horizontal {
98
+ margin: 2%;
99
+ padding-bottom:15px;
100
+ padding-top:15px;
101
+ width: 96%;
102
+ clear:both;
103
+ }
104
+
105
+ .rounded {
106
+ border-radius :10px;
107
+ -moz-border-radius:10px;
108
+ }
109
+
110
+ .box {
111
+ background : #D5E1DD;
112
+ /* background: -webkit-gradient(linear, left top, left bottom, from(#ccc), to(#000)); */
113
+
114
+ border : none;
115
+
116
+ padding : 10px;
117
+ margin: 0;
118
+ font-family : Tahoma, Arial, sans-serif;
119
+ color : black;
120
+ }
121
+
122
+ .databases {
123
+ width :46.5%;
124
+ }
125
+ .nucleotide {
126
+ float :left;
127
+ }
128
+ .protein {
129
+ float : right;
130
+ }
131
+
132
+ .radiobutton{
133
+ margin: 9px 5px 0px 0px;
134
+ padding: 0;
135
+ vertical-align: top;
136
+ }
137
+ .dbcheckbox { /* within each "database box" */
138
+ float:left;
139
+ clear:both;
140
+ margin: 5px 10px 0 0;
141
+ padding: 0;
142
+ }
143
+ .dbdescription {
144
+ float:left;
145
+ }
146
+
147
+ .advanced {
148
+ float:left;
149
+ width: 78%;
150
+ }
151
+
152
+ .greytext {
153
+ color: #A9A9A9;
154
+ }
155
+
156
+ .pointer {
157
+ cursor:pointer;
158
+ }
159
+
160
+ .advanced pre {
161
+ display: none;
162
+ }
163
+ .advanced input {
164
+ float:right;
165
+ width: 60%;
166
+ }
167
+
168
+ .submit_button {
169
+ float:right;
170
+ width: 17.5%;
171
+ }
172
+ .submit_button input {
173
+ width: 100%;
174
+ background-color : #323292;
175
+ background: -webkit-gradient(linear, left top, right bottom, from(#0066CC), to(#192D53));
176
+ background: -moz-linear-gradient(45deg,#0066CC,#192D53);
177
+
178
+ border : 2px solid #192D53;
179
+ border-radius : 10px;
180
+ -moz-border-radius: 10px;
181
+ color : white;
182
+ padding : 2.5px 10px 2.5px 10px;
183
+ cursor : pointer;
184
+ font-size : 1.8em;
185
+ font-family : Tahoma, Arial, sans-serif;
186
+ margin: 0 0 0 0;
187
+
188
+ }
189
+ .submit_button input:active {
190
+ color: #1f2126;
191
+
192
+ }
193
+ .submit_button input:hover {
194
+ background: -webkit-gradient(linear, left top, right bottom, from(#009cff), to(#0261c2));
195
+ background: -moz-linear-gradient(45deg,#009cff,#0261c2);
196
+
197
+ }
198
+
199
+ h2, .bigtext{
200
+ font-family: Tahoma, Arial, serif;
201
+ font-weight: bold;
202
+ font-size: 20px;
203
+ color: black;
204
+ margin:0;
205
+ padding: 0px;
206
+ /* margin: 8px 0 10px 0;*/
207
+ }
208
+
209
+ h3{
210
+ font-family: Tahoma, Arial, serif;
211
+ font-weight: bold;
212
+ font-size: 16px;
213
+ color: black;
214
+ margin:0;
215
+ padding: 0px;
216
+ /* margin: 8px 0 10px 0;*/
217
+ }
218
+
219
+ .smalltext{
220
+ font-size:10px;
221
+ }
222
+
223
+
224
+ #result{
225
+ clear:both;
226
+ background-color: white;
227
+ }
228
+ .result_even_true{
229
+ background-color: #ffe0f9;
230
+ margin: 0 18px 0 18px;
231
+ border-radius :10px;
232
+ -moz-border-radius:10px;
233
+ padding-left: 3%;
234
+ padding-top: 3%;
235
+ }
236
+ .result_even_false{
237
+ background-color: #dfefe6;
238
+ margin: 0 18px 0 18px;
239
+ border-radius :10px;
240
+ -moz-border-radius:10px;
241
+ padding-left: 3%;
242
+ padding-top: 3%;
243
+ }
244
+ .blast_result{
245
+ font-family: "Lucida Console", Lucida, monospace;
246
+ background-color: #A9A9A9;
247
+ border-radius :10px;
248
+ -moz-border-radius:10px;
249
+ padding-left: 2%;
250
+ }
251
+
252
+ a {
253
+ color: #b22222;
254
+ }
@@ -0,0 +1,29 @@
1
+ /*!
2
+ * Bootstrap v2.0.2
3
+ *
4
+ * Copyright 2012 Twitter, Inc
5
+ * Licensed under the Apache License v2.0
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
+ */
10
+ .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
11
+ .clearfix:after{clear:both;}
12
+ .hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;}
13
+ .input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
14
+ .dropdown{position:relative;}
15
+ .dropdown-toggle{*margin-bottom:-3px;}
16
+ .dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
17
+ .caret{display:inline-block;width:0;height:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"";}
18
+ .dropdown .caret{margin-top:8px;margin-left:2px;}
19
+ .dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);}
20
+ .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.pull-right{right:0;left:auto;}
21
+ .dropdown-menu .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;}
22
+ .dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333333;white-space:nowrap;}
23
+ .dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;}
24
+ .dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);}
25
+ .dropdown.open .dropdown-menu{display:block;}
26
+ .pull-right .dropdown-menu{left:auto;right:0;}
27
+ .dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";}
28
+ .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;}
29
+ .typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
@@ -0,0 +1,155 @@
1
+ /*!
2
+ * Bootstrap v2.0.3
3
+ *
4
+ * Copyright 2012 Twitter, Inc
5
+ * Licensed under the Apache License v2.0
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
+ */
10
+ .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
11
+ .clearfix:after{clear:both;}
12
+ .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
13
+ .input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
14
+ [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;}
15
+ .icon-white{background-image:url("../img/glyphicons-halflings-white.png");}
16
+ .icon-glass{background-position:0 0;}
17
+ .icon-music{background-position:-24px 0;}
18
+ .icon-search{background-position:-48px 0;}
19
+ .icon-envelope{background-position:-72px 0;}
20
+ .icon-heart{background-position:-96px 0;}
21
+ .icon-star{background-position:-120px 0;}
22
+ .icon-star-empty{background-position:-144px 0;}
23
+ .icon-user{background-position:-168px 0;}
24
+ .icon-film{background-position:-192px 0;}
25
+ .icon-th-large{background-position:-216px 0;}
26
+ .icon-th{background-position:-240px 0;}
27
+ .icon-th-list{background-position:-264px 0;}
28
+ .icon-ok{background-position:-288px 0;}
29
+ .icon-remove{background-position:-312px 0;}
30
+ .icon-zoom-in{background-position:-336px 0;}
31
+ .icon-zoom-out{background-position:-360px 0;}
32
+ .icon-off{background-position:-384px 0;}
33
+ .icon-signal{background-position:-408px 0;}
34
+ .icon-cog{background-position:-432px 0;}
35
+ .icon-trash{background-position:-456px 0;}
36
+ .icon-home{background-position:0 -24px;}
37
+ .icon-file{background-position:-24px -24px;}
38
+ .icon-time{background-position:-48px -24px;}
39
+ .icon-road{background-position:-72px -24px;}
40
+ .icon-download-alt{background-position:-96px -24px;}
41
+ .icon-download{background-position:-120px -24px;}
42
+ .icon-upload{background-position:-144px -24px;}
43
+ .icon-inbox{background-position:-168px -24px;}
44
+ .icon-play-circle{background-position:-192px -24px;}
45
+ .icon-repeat{background-position:-216px -24px;}
46
+ .icon-refresh{background-position:-240px -24px;}
47
+ .icon-list-alt{background-position:-264px -24px;}
48
+ .icon-lock{background-position:-287px -24px;}
49
+ .icon-flag{background-position:-312px -24px;}
50
+ .icon-headphones{background-position:-336px -24px;}
51
+ .icon-volume-off{background-position:-360px -24px;}
52
+ .icon-volume-down{background-position:-384px -24px;}
53
+ .icon-volume-up{background-position:-408px -24px;}
54
+ .icon-qrcode{background-position:-432px -24px;}
55
+ .icon-barcode{background-position:-456px -24px;}
56
+ .icon-tag{background-position:0 -48px;}
57
+ .icon-tags{background-position:-25px -48px;}
58
+ .icon-book{background-position:-48px -48px;}
59
+ .icon-bookmark{background-position:-72px -48px;}
60
+ .icon-print{background-position:-96px -48px;}
61
+ .icon-camera{background-position:-120px -48px;}
62
+ .icon-font{background-position:-144px -48px;}
63
+ .icon-bold{background-position:-167px -48px;}
64
+ .icon-italic{background-position:-192px -48px;}
65
+ .icon-text-height{background-position:-216px -48px;}
66
+ .icon-text-width{background-position:-240px -48px;}
67
+ .icon-align-left{background-position:-264px -48px;}
68
+ .icon-align-center{background-position:-288px -48px;}
69
+ .icon-align-right{background-position:-312px -48px;}
70
+ .icon-align-justify{background-position:-336px -48px;}
71
+ .icon-list{background-position:-360px -48px;}
72
+ .icon-indent-left{background-position:-384px -48px;}
73
+ .icon-indent-right{background-position:-408px -48px;}
74
+ .icon-facetime-video{background-position:-432px -48px;}
75
+ .icon-picture{background-position:-456px -48px;}
76
+ .icon-pencil{background-position:0 -72px;}
77
+ .icon-map-marker{background-position:-24px -72px;}
78
+ .icon-adjust{background-position:-48px -72px;}
79
+ .icon-tint{background-position:-72px -72px;}
80
+ .icon-edit{background-position:-96px -72px;}
81
+ .icon-share{background-position:-120px -72px;}
82
+ .icon-check{background-position:-144px -72px;}
83
+ .icon-move{background-position:-168px -72px;}
84
+ .icon-step-backward{background-position:-192px -72px;}
85
+ .icon-fast-backward{background-position:-216px -72px;}
86
+ .icon-backward{background-position:-240px -72px;}
87
+ .icon-play{background-position:-264px -72px;}
88
+ .icon-pause{background-position:-288px -72px;}
89
+ .icon-stop{background-position:-312px -72px;}
90
+ .icon-forward{background-position:-336px -72px;}
91
+ .icon-fast-forward{background-position:-360px -72px;}
92
+ .icon-step-forward{background-position:-384px -72px;}
93
+ .icon-eject{background-position:-408px -72px;}
94
+ .icon-chevron-left{background-position:-432px -72px;}
95
+ .icon-chevron-right{background-position:-456px -72px;}
96
+ .icon-plus-sign{background-position:0 -96px;}
97
+ .icon-minus-sign{background-position:-24px -96px;}
98
+ .icon-remove-sign{background-position:-48px -96px;}
99
+ .icon-ok-sign{background-position:-72px -96px;}
100
+ .icon-question-sign{background-position:-96px -96px;}
101
+ .icon-info-sign{background-position:-120px -96px;}
102
+ .icon-screenshot{background-position:-144px -96px;}
103
+ .icon-remove-circle{background-position:-168px -96px;}
104
+ .icon-ok-circle{background-position:-192px -96px;}
105
+ .icon-ban-circle{background-position:-216px -96px;}
106
+ .icon-arrow-left{background-position:-240px -96px;}
107
+ .icon-arrow-right{background-position:-264px -96px;}
108
+ .icon-arrow-up{background-position:-289px -96px;}
109
+ .icon-arrow-down{background-position:-312px -96px;}
110
+ .icon-share-alt{background-position:-336px -96px;}
111
+ .icon-resize-full{background-position:-360px -96px;}
112
+ .icon-resize-small{background-position:-384px -96px;}
113
+ .icon-plus{background-position:-408px -96px;}
114
+ .icon-minus{background-position:-433px -96px;}
115
+ .icon-asterisk{background-position:-456px -96px;}
116
+ .icon-exclamation-sign{background-position:0 -120px;}
117
+ .icon-gift{background-position:-24px -120px;}
118
+ .icon-leaf{background-position:-48px -120px;}
119
+ .icon-fire{background-position:-72px -120px;}
120
+ .icon-eye-open{background-position:-96px -120px;}
121
+ .icon-eye-close{background-position:-120px -120px;}
122
+ .icon-warning-sign{background-position:-144px -120px;}
123
+ .icon-plane{background-position:-168px -120px;}
124
+ .icon-calendar{background-position:-192px -120px;}
125
+ .icon-random{background-position:-216px -120px;}
126
+ .icon-comment{background-position:-240px -120px;}
127
+ .icon-magnet{background-position:-264px -120px;}
128
+ .icon-chevron-up{background-position:-288px -120px;}
129
+ .icon-chevron-down{background-position:-313px -119px;}
130
+ .icon-retweet{background-position:-336px -120px;}
131
+ .icon-shopping-cart{background-position:-360px -120px;}
132
+ .icon-folder-close{background-position:-384px -120px;}
133
+ .icon-folder-open{background-position:-408px -120px;}
134
+ .icon-resize-vertical{background-position:-432px -119px;}
135
+ .icon-resize-horizontal{background-position:-456px -118px;}
136
+ .icon-hdd{background-position:0 -144px;}
137
+ .icon-bullhorn{background-position:-24px -144px;}
138
+ .icon-bell{background-position:-48px -144px;}
139
+ .icon-certificate{background-position:-72px -144px;}
140
+ .icon-thumbs-up{background-position:-96px -144px;}
141
+ .icon-thumbs-down{background-position:-120px -144px;}
142
+ .icon-hand-right{background-position:-144px -144px;}
143
+ .icon-hand-left{background-position:-168px -144px;}
144
+ .icon-hand-up{background-position:-192px -144px;}
145
+ .icon-hand-down{background-position:-216px -144px;}
146
+ .icon-circle-arrow-right{background-position:-240px -144px;}
147
+ .icon-circle-arrow-left{background-position:-264px -144px;}
148
+ .icon-circle-arrow-up{background-position:-288px -144px;}
149
+ .icon-circle-arrow-down{background-position:-312px -144px;}
150
+ .icon-globe{background-position:-336px -144px;}
151
+ .icon-wrench{background-position:-360px -144px;}
152
+ .icon-tasks{background-position:-384px -144px;}
153
+ .icon-filter{background-position:-408px -144px;}
154
+ .icon-briefcase{background-position:-432px -144px;}
155
+ .icon-fullscreen{background-position:-456px -144px;}