sequenceserver-beta 0.8.7.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/LICENSE.Apache.txt +176 -0
- data/LICENSE.txt +69 -0
- data/README.txt +5 -0
- data/bin/sequenceserver +82 -0
- data/config.ru +6 -0
- data/example.config.yml +39 -0
- data/lib/profile_code.rb +217 -0
- data/lib/sequenceserver.rb +527 -0
- data/lib/sequenceserver/blast.rb +92 -0
- data/lib/sequenceserver/customisation.rb +60 -0
- data/lib/sequenceserver/database.rb +29 -0
- data/lib/sequenceserver/database_formatter.rb +190 -0
- data/lib/sequenceserver/helpers.rb +136 -0
- data/lib/sequenceserver/sequencehelpers.rb +93 -0
- data/lib/sequenceserver/sinatralikeloggerformatter.rb +12 -0
- data/lib/sequenceserver/version.rb +9 -0
- data/public/css/beige.css.css +254 -0
- data/public/css/bootstrap.dropdown.css +29 -0
- data/public/css/bootstrap.icons.css +155 -0
- data/public/css/bootstrap.min.css +415 -0
- data/public/css/bootstrap.modal.css +28 -0
- data/public/css/custom.css +232 -0
- data/public/img/glyphicons-halflings-white.png +0 -0
- data/public/img/glyphicons-halflings.png +0 -0
- data/public/js/bootstrap.dropdown.js +92 -0
- data/public/js/bootstrap.modal.js +7 -0
- data/public/js/bootstrap.transition.js +7 -0
- data/public/js/jquery-scrollspy.js +98 -0
- data/public/js/jquery-ui.js +14987 -0
- data/public/js/jquery.activity.js +10 -0
- data/public/js/jquery.enablePlaceholder.min.js +10 -0
- data/public/js/jquery.js +5 -0
- data/public/js/sequenceserver.blast.js +208 -0
- data/public/js/sequenceserver.js +304 -0
- data/public/js/store.min.js +2 -0
- data/sequenceserver.gemspec +49 -0
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta +5486 -0
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nhr +0 -0
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nin +0 -0
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nsq +0 -0
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta +6449 -0
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.phr +0 -0
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.pin +0 -0
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.psq +0 -0
- data/tests/run +26 -0
- data/tests/test_sequencehelpers.rb +77 -0
- data/tests/test_sequenceserver_blast.rb +60 -0
- data/tests/test_ui.rb +104 -0
- data/tests/test_ui.rb~ +104 -0
- data/tests/ui.specs.todo +10 -0
- data/views/500.erb +22 -0
- data/views/_options.erb +144 -0
- data/views/search.erb +220 -0
- 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;}
|