00001 <?php
00011 class STransNavXML extends STransXML
00012 {
00017 public function doc() {
00018 return "STransNavXML translates a NavXML string to generate"
00019 . " all the navigation elements of your page-- the"
00020 . " breadcrumbs and the jump-to, browse, and search controls.";
00021 }
00022
00023
00024
00025
00026
00032 public function translate ($si)
00033 {
00034 if(parent::translate($si) === false) return false;
00035 $xml = SXMLHelper::parse($si->getSource());
00036
00037
00038 $this->page->setSlot('TopBarNavWell1', $this->formatNavJumpToHtml($xml, $si));
00039 $this->page->setSlot('TopBarNavWell2', $this->formatNavBrowseHtml($xml, $si));
00040 $this->createSearchBox($xml);
00041
00042
00043 if(isset($xml->tabs))
00044 {
00045 if (isset($xml->tabs->level[0])){ $this->page->setSlot('TabsBar1', $this->formatTabs($xml->tabs->level[0], 1)); }
00046 if (isset($xml->tabs->level[1])){ $this->page->setSlot('TabsBar2', $this->formatTabs($xml->tabs->level[1], 2));}
00047 }
00048
00049
00050 $this->formatNavLocHtml($xml);
00051 return true;
00052 }
00053
00054
00055
00056
00057
00058
00064 protected function createSearchBox ($xml)
00065 {
00066 if (isset($xml->search) && isset($xml->search->link))
00067 {
00068
00069 if (isset($SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], "Safari")){
00070
00071 $this->page->setSlot('TopBarNavWell3', <<<END_SEARCH
00072
00073 <input type="search" results="10" autosave="ShodorPR2" name="ss" id="sbox" size="16" value=" Search" onclick="javascript:if(this.value==' Search')this.value='';" onblur="javascript:if(this.value=='')this.value=' Search';"/>
00074 END_SEARCH
00075 );
00076 } else {
00077
00078 $this->page->setSlot('TopBarNavWell3', <<<END_SEARCH
00079
00080 <input type="text" name="ss" id="sbox" size="13" value=" Search" onclick="javascript:if(this.value==' Search')this.value='';" onblur="javascript:if(this.value=='')this.value=' Search';"/>
00081 END_SEARCH
00082 );
00083 }
00084 $this->page->setSlot('SearchScript', $xml->search->link);
00085 }
00086 }
00087
00088
00089
00090
00091
00092
00098 protected function formatNavJumpToHtml($navXml, $si)
00099 {
00100 if (!isset($navXml->jumpTo)){ return (""); }
00101 return $this->buildPullDown($navXml->jumpTo, "JumpToMenu", "Jump To:", "jumpTo", "", $si);
00102 }
00103
00109 protected function formatNavBrowseHtml($navXml, $si)
00110 {
00111 if (!isset($navXml->browse)){ return (""); }
00112 $rand = rand(0,1000);
00113
00114 return $this->buildPullDown($navXml->browse, "BrowseMenu", "Browse:", "browse", "&transaction_id=$rand", $si);
00115 }
00116
00117
00118
00119
00120
00121
00122
00127 protected function formatNavLocHtml($navXml)
00128 {
00129 $htmlOutput = "";
00130 $outarray = array();
00131 foreach ($navXml->path->level as $curlevel) {
00132 array_push($outarray, "<a href=\"" . $curlevel->link[0]->value . "\">" . $curlevel->link[0]->name . "</a>");
00133 }
00134 $this->page->setSlot('Path', implode(" > ", $outarray));
00135 }
00136
00137
00138
00139
00140
00141
00142
00143
00144
00160 protected function buildPullDown ($xmlSection, $id, $name, $function, $extraScript, $si)
00161 {
00162 $htmlOutput = "<select id=\"$id\" onchange=\"javascript:if(this.options[this.selectedIndex].value <= 0) { this.selectedIndex = 0; } else { $function(this.options[this.selectedIndex].value);}\">";
00163 $htmlOutput .= "<option selected=\"selected\" value=\"0\">$name</option>";
00164 $count = 1;
00165 $navJSAdd = "";
00166 $navJSAdd .= "var $function" . "_links" . " = new Array(''";
00167 foreach($xmlSection->children() as $tag => $child)
00168 {
00169 switch($tag){
00170 case 'level':
00171 $htmlOutput .= "<option value=\"" . $count . "\">" . $child->name . "</option>";
00172 $linkValue = "";
00173 if (isset($child->link)) $linkValue = $child->link . $extraScript;
00174 $linkValue = rawurlencode(utf8_encode($linkValue));
00175
00176 $navJSAdd .= ", '$linkValue'";
00177 $count++;
00178 break;
00179 case 'levelSeparator':
00180 $htmlOutput .= "<option disabled=
00181 \"disabled\" value=\"-1\">--------</option>";
00182 break;
00183 default:
00184 break;
00185 }
00186 }
00187 $navJSAdd .= ");\n";
00188 $this->page->appendToSlot('ExtraJS', $navJSAdd);
00189
00190 $htmlOutput .= "</select>";
00191 return $htmlOutput;
00192 }
00193
00194
00203 protected function formatTabs ($xml, $level)
00204 {
00205
00206 $htmlOutput = "";
00207
00208 foreach($xml->link as $link)
00209 {
00210 $select = "";
00211 $selectedTab = strtolower($this->getOption('selectedTab' . $level));
00212 if ($selectedTab != "")
00213 {
00214 $linkValueParts = explode("/", $link->value);
00215 $linkPageName = $linkValueParts[count($linkValueParts) - 1];
00216 $linkPageNameParts = explode("?", $linkPageName);
00217 $linkPageName = $linkPageNameParts[0];
00218 if ($selectedTab == strtolower($link->name)
00219 || $selectedTab == strtolower($link->value)
00220 || $selectedTab == strtolower($linkPageName)
00221 )
00222 { $select = " class=\"select\""; }
00223 }
00224 $htmlOutput .= <<<ENDLINK
00225 <li$select><a href="$link->value">$link->name</a></li>
00226 ENDLINK;
00227 }
00228
00229
00230
00231 return ($htmlOutput == "") ? "" : "<ul>$htmlOutput</ul>";
00232
00233
00234
00235
00236 }
00237 }
00238
00239 ?>