|
@@ -860,7 +860,8 @@ function tripal_feature_color_sequence($sequence, $parts, $defline) {
|
|
|
$newseq .= ">$defline\n";
|
|
|
|
|
|
// iterate through the parts. They should be in order.
|
|
|
- $ends = array();
|
|
|
+ $starts = array(); // an array holding all of the children starting locations
|
|
|
+ $ends = array(); // an array holding all of the children's ending locations
|
|
|
$seqcount = 0;
|
|
|
foreach ($parts as $index => $types) {
|
|
|
|
|
@@ -868,51 +869,45 @@ function tripal_feature_color_sequence($sequence, $parts, $defline) {
|
|
|
// same position so we only need the first record
|
|
|
foreach ($types as $type => $child) {
|
|
|
$start = $child['start'];
|
|
|
- break;
|
|
|
+ $starts[$start][] = $type;
|
|
|
}
|
|
|
|
|
|
- // add in the sequence up to the start of this part
|
|
|
- for ($i = $pos; $i < $start; $i++) {
|
|
|
- $newseq .= $sequence{$pos};
|
|
|
- $seqcount++;
|
|
|
- if ($seqcount % 50 == 0) {
|
|
|
- $newseq .= "\n";
|
|
|
- }
|
|
|
- if (array_key_exists($pos, $ends)) {
|
|
|
- foreach ($ends[$pos] as $end) {
|
|
|
- $newseq .= "</span>";
|
|
|
- }
|
|
|
- }
|
|
|
- $pos++;
|
|
|
- }
|
|
|
-
|
|
|
- // we want to sort the parts by their end. We want the span tag to
|
|
|
+ // next, sort the parts by their end. We want the span tag to
|
|
|
// to be added in the order the parts end.
|
|
|
usort($types, 'tripal_feature_sort_rel_parts_by_end');
|
|
|
|
|
|
- // now add the child span for all types that start at this position
|
|
|
+ // iterate through the types in order that then end and create a
|
|
|
+ // span for it.
|
|
|
foreach ($types as $type) {
|
|
|
- $class = "tripal_feature-featureloc_sequence-" . $type['type'];
|
|
|
- $newseq .= "<span class=\"$class\">";
|
|
|
- // add the end position
|
|
|
$end = $type['end'];
|
|
|
- $ends[$end][] = $end;
|
|
|
+ $ends[$end][] = $type;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // add in rest of the sequence
|
|
|
- for ($i = $pos; $i < strlen($sequence); $i++) {
|
|
|
- $newseq .= $sequence{$pos};
|
|
|
+ // iterate through each nucleotide in the sequence, add a new line very
|
|
|
+ // 50 characters and add the spans as we encounter them
|
|
|
+ for ($i = 0; $i < strlen($sequence); $i++) {
|
|
|
+
|
|
|
+ // if we are at and end of a span then close it
|
|
|
+ if (array_key_exists($i, $ends)) {
|
|
|
+ foreach ($ends[$i] as $index => $type) {
|
|
|
+ $newseq .= "</span>";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // if we are at and end of a span then close it
|
|
|
+ if (array_key_exists($i, $starts)) {
|
|
|
+ foreach ($starts[$i] as $index => $type) {
|
|
|
+ $class = "tripal_feature-featureloc_sequence-" . $type;
|
|
|
+ $newseq .= "<span class=\"$class\">";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $newseq .= $sequence{$i};
|
|
|
$seqcount++;
|
|
|
if ($seqcount % 50 == 0) {
|
|
|
$newseq .= "\n";
|
|
|
}
|
|
|
- if (array_key_exists($pos, $ends)) {
|
|
|
- foreach ($ends[$pos] as $end) {
|
|
|
- $newseq .= "</span>";
|
|
|
- }
|
|
|
- }
|
|
|
- $pos++;
|
|
|
}
|
|
|
|
|
|
$newseq .= "</pre>";
|