]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/javascript/opac/Page.js
fixin and makin purdy
[Evergreen.git] / Open-ILS / src / javascript / opac / Page.js
1 /* Top level page object.  All pages descend from this class */
2
3 function Page() {}
4
5 Page.prototype.init = function() {
6         debug("Falling back to Page.init()");
7 }
8
9 /* override me */
10 Page.prototype.instance = function() {
11         throw new EXAbstract(
12                         "instance() must be overridden by all Page subclasses");
13 }
14
15
16 /* XXX move me to the status bar */
17 Page.prototype.updateSelectedLocation = function(org) {
18         var node;
19         if( typeof org == 'object' ) node = org;
20         else node = getOrgById(org);
21         globalSelectedLocation = node;
22         globalSearchDepth = findOrgType(node.ou_type()).depth();
23         this.setLocDisplay();
24 }
25
26 Page.prototype.updateCurrentLocation = function(org) {
27         if( typeof org == 'object' ) node = org;
28         else node = getOrgById(orgid);
29         globalLocation = node;
30         this.setLocDisplay();
31 }
32         
33
34 /* tells the user where he is searching */
35 Page.prototype.setLocDisplay = function(name) {
36
37         debug("Setting loc display on the status bar");
38         this.searchingCell = getById("now_searching_cell");
39
40         if( this.searchingCell == null ) return;
41         var name;
42         
43         var orgunit;
44         if( globalSelectedLocation )
45                 orgunit = globalSelectedLocation;
46         else { orgunit = globalLocation; }
47
48         this.searchingCell.innerHTML = 
49                 "Now Searching <span class='breadcrumb_label'>" + orgunit.name() + "</span>";
50
51         this.resetRange();
52         return;
53
54
55
56
57         var arr = orgNodeTrail(orgunit);
58
59         this.searchingCell.innerHTML = "";
60         var names = new Array()
61         for( var i in arr) 
62                 names.push(arr[i].name());
63
64         this.searchingCell.innerHTML = 
65                 "<span class='breadcrumb_label'>" + 
66                 names.join("</span> / <span class='breadcrumb_label'>") + 
67                 "</span>";
68
69         this.resetRange();
70
71 }
72
73 Page.prototype.resetRange = function() {
74
75         this.searchRange                        = getById("search_range_select");
76
77         while( this.searchRange.options.length ) {
78                 this.searchRange.options[0] = null;
79         }
80
81         var orgunit = globalSelectedLocation;
82         if(!orgunit)
83                 orgunit = globalLocation;
84
85         debug("Reseting search range with search location " + orgunit);
86         debug("Resetting search range with search depth " + globalSearchDepth );
87
88         var selectedOption = null;
89
90         if(this.searchRange) {
91
92                 for( var index in globalOrgTypes ) {
93                         var otype = globalOrgTypes[index];
94
95                         if( otype.depth() > findOrgType(orgunit.ou_type()).depth() )
96                                 continue;
97
98                         var select =  new Option(otype.opac_label(), otype.depth());
99
100                         this.searchRange.options[this.searchRange.options.length] = select;
101
102                         if( otype.depth() == globalSearchDepth ) {
103                                 selectedOption = index;
104                         }
105                 }
106         }
107
108         this.searchRange.selectedIndex = selectedOption;
109         var opt = this.searchRange.options[selectedOption];
110         if(opt) opt.selected = true;
111
112         if(this.searchRange.options.length == 1 ) 
113                 hideMe(this.searchRange.parentNode);
114         else  {
115                 this.searchRange.parentNode.style.visibility = "visible";
116                 this.searchRange.parentNode.style.display = "inline";
117         }
118
119         if( instanceOf(this, AbstractRecordResultPage) ) {
120
121                 /* submit the search when the search range is selected */
122                 var obj = this;
123
124                 debug("Setting onclick for selector");
125
126                 var obj = this;
127                 this.searchRange.onchange = function() {
128         
129                         var location = globalSelectedLocation;
130                         if(location == null) location = globalLocation.id();
131                         else location = location.id();
132                         globalSearchDepth = obj.searchRange.options[obj.searchRange.selectedIndex].value;       
133         
134                         url_redirect( [ 
135                                         "target",                                       "mr_result",
136                                         "mr_search_type",                       lastSearchType,
137                                         "mr_search_query",              lastSearchString,
138                                         "mr_search_location",   location,
139                                         "mr_search_depth",              globalSearchDepth,      
140                                         "page",                                         0
141                                         ] );
142                 }
143         }
144 }
145
146
147
148
149
150 Page.prototype.setPageTrail = function() {
151         debug("Falling back to Page.setPageTrail");
152 }
153
154
155 Page.prototype.buildTrailLink = function(type, active) {
156
157         var obj = locationStack[type];
158         if(obj == null) return;
159
160         var div = createAppElement("div");
161
162         if(active) {
163                 add_css_class(div,"page_trail_word");
164                 var a = createAppElement("a");
165                 a.setAttribute("href", obj.location);
166                 a.appendChild(createAppTextNode(obj.title));
167                 a.title = obj.title;
168                 div.appendChild(a);
169
170         } else {
171                 add_css_class(div,"page_trail_word_inactive");
172                 div.appendChild(createAppTextNode(obj.title));
173         }
174
175         return div;
176 }
177
178 Page.prototype.buildDivider = function() {
179         var div = createAppElement("div");
180         div.className = "page_trail_divider";
181         var text =  createAppTextNode(" / ");
182         div.appendChild(text);
183         return div;
184 }
185
186 /* if 'full' add target=_top to break out of the page */
187 Page.prototype.buildNavBox = function(full) {
188         Page.navBox = new Box();
189         Page.navBox.init("Navigation", false, false);
190         var table = elem("table");
191         add_css_class(table, "main_nav_table");
192
193         var arr = [];
194
195         /* location tree */
196         var loc = null;
197         try {
198                 if(globalOrgTree)
199                         loc = elem("a", 
200                                 {id:"location_nav_link", href:"javascript:void(0);"}, null, "Change Search Location");
201
202                 loc.onclick = function(evt) {
203                         globalPage.locationTree.toggle(getById("location_nav_link"));
204                 }
205                 arr.push(loc);
206         } catch(E){}
207
208         if(globalPort == "443") globalPort = "80";
209         var prefix = "http://" + globalRootURL + ":" + globalPort + globalRootPath;
210
211         arr.push(elem("a", {href: prefix + '?target=advanced_search'}, null, "Advanced Search"));
212         arr.push(elem("a", {href: prefix + '?target=my_opac'}, null, "My OPAC"));
213         arr.push(elem("a", {href: prefix + '?target=about'}, null, "About PINES"));
214         if(loc) arr.push(this.buildDeepLink());
215
216         if(UserSession.instance().verifySession()) {
217                 arr.push(elem("a", {href: prefix + "?target=logout"}, null, "Logout"));
218         } 
219
220
221         for( var i in arr ) {
222                 var row = table.insertRow(table.rows.length);
223                 add_css_class(row, "main_nav_row");
224                 var cell = row.insertCell(row.cells.length);
225                 add_css_class(cell, "main_nav_cell");
226                 cell.appendChild(arr[i]);
227                 if(full) 
228                         arr[i].setAttribute("target", "_top");
229         }
230
231         /* append to the page */
232         Page.navBox.addItem(table);
233         Page.navBox.finalize();
234
235         var location = getById("main_page_nav_box");
236         if(location) 
237                 location.appendChild(Page.navBox.getNode());
238         
239
240         return Page.navBox.getNode();
241 }
242
243 Page.prototype.buildDeepLink = function() {
244         try {
245                 if(!globalAppFrame)
246                         return elem("div");
247         } catch(E) { return elem("div"); }
248
249         var org = globalSelectedLocation;
250         if(org == null)
251                 org = globalLocation;
252         if(org) org = org.id();
253
254         var depth = globalSearchDepth;
255
256         if(globalPort == "443") globalPort = "80";
257         var prefix = "http://" + globalRootURL + ":" + globalPort + globalRootPath;
258
259         var string =globalAppFrame.location.href;
260         if(!string.match(/sub_frame/))
261                 string += "&sub_frame=1"
262
263         if(org) {
264                 if(!string.match(/location/))
265                 string += "&location=" + org;
266         }
267
268         if(depth) {
269                 if(!string.match(/depth/))
270                 string += "&depth=" + depth;
271         }
272
273         debug("Redirecting deep link to " + string );
274
275         var a = elem("a",
276                 { href: prefix + string }, null, "Link to this page"
277         );
278
279         a.setAttribute("target", "_blank");
280         return a;
281 }
282
283
284 Page.prototype.destroy = function() { 
285         for( var x in this ){
286                 this[x] = null;
287         }
288 }
289
290