sequenceserver-beta 0.8.7.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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;}
|